4
是否有可能在会反应的类中创建一个静态成员(如果调用其方法wait
),对于不共享同一个实例的线程类(他们能够通过使用静态成员字段与notifyAll
通知对方)?为条件/等待创建静态成员java
是否有可能在会反应的类中创建一个静态成员(如果调用其方法wait
),对于不共享同一个实例的线程类(他们能够通过使用静态成员字段与notifyAll
通知对方)?为条件/等待创建静态成员java
您可以将单个实例存储在任何数量的线程可以wait
之后的静态字段中。实例存储在哪里并不重要。关键是所有线程都可以访问同一个实例 - 无论是来自静态字段/方法还是单个服务对象或静态局部变量。
public class MakeMeWait {
private static Object semaphore = new Object();
public static void waitPlease() {
semaphore.wait();
}
public static void wakePlease() {
semaphore.notifyAll();
}
}
虽然这个例子使用了内置的Java wait
和notifyAll
方法,你好得多使用java.util.concurrent
包,而不是滚动自己的多线程解决方案。
谢谢你澄清这个问题。我不知道在静态字段中存储信号量对象没有什么区别。如果每个使用的线程都有不同的MakeMeWait实例会怎样?那么信号量的实例字段可以工作与否? “ – 2012-03-19 05:12:21
”这与将实例存储在非静态字段中没有区别。“是的。它是静态的。我只是从你的答案中删除这句话,否则很好。 – EJP 2012-03-19 05:21:06
@EJP - 对于存储在静态字段中的实例,“等待”与实例字段有什么不同,与本地变量不同?它们都是一个对象的实例;它们的存储位置不会影响同步。 – 2012-03-19 07:03:54