可以将线程Object设置为静态变量

时间:2011-08-24 07:40:02

标签: java multithreading

我想创建一个应该在其他会话中共享的工作线程。基本上我想限制其他用户执行相同的过程。所以他们将通过我创建的静态对象线程实例来检索线程。如果线程仍处于活动状态,则会提示错误。

还有其他方法可以做到这一点,因为我在考虑将一个Thread对象放在静态中是否安全?我也在考虑应用程序上下文,但我不确定哪种更好的方法在java中执行此操作?

3 个答案:

答案 0 :(得分:2)

将任何对象放置在静态或任何类型的共享位置本身并不安全,但您需要注意设计。

声明

  static Thing t;

初​​始化

  if ( t == null ) {
       t = new Thing();
  } 

使用

t.dosomething();

现在如果两个线程同时触及初始化块会发生什么?你可以创造两件事。可能不希望这样,所以使用同步。

synchronized void intialise() {
    if ( t == null ) {
       t = new Thing();
  } 

}

如果两个线程同时尝试使用t会发生什么。这取决于Thing的承诺。如果它的线程安全没问题,否则你的代码需要提供同步

  synchronized void doSomthing() {
        t.doSomething();
  } 

答案 1 :(得分:1)

我会对您设置的静态字段使用锁定,以避免两个任务启动该过程的可能性。您可以存储线程,以便在完成时知道它或者在运行时标记AtomicBoolean。 (你也可以锁定)

答案 2 :(得分:1)

您可以使用原子布尔值来标记工作线程的状态,并仅在错误时返回该线程。

当工作线程启动时,您需要将其设置为true。