Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多个线程可以同时等待一个对象吗?_Java_Multithreading_Monitor - Fatal编程技术网

Java 多个线程可以同时等待一个对象吗?

Java 多个线程可以同时等待一个对象吗?,java,multithreading,monitor,Java,Multithreading,Monitor,如果只能从同步上下文调用wait,并且只能在保持对象锁的同时调用对象上的wait,那么多个线程如何在同一对象上等待?此外,由于还必须从同步上下文中调用notify,因此notify如何发生 wait方法释放它正在等待的对象上的锁。一旦释放,另一个对象就可以获得锁并等待或通知。仅此而已。不是对您的问题的直接回答,但是您可以使用Java 5上引入的并发包中的类,而不是使用wait方法。您可以对要等待的类初始化CountDownLatch,等待它的方法应该执行wait()方法,要释放闩锁,您可以调用c

如果只能从同步上下文调用wait,并且只能在保持对象锁的同时调用对象上的wait,那么多个线程如何在同一对象上等待?此外,由于还必须从同步上下文中调用notify,因此notify如何发生

wait方法释放它正在等待的对象上的锁。一旦释放,另一个对象就可以获得锁并等待或通知。仅此而已。

不是对您的问题的直接回答,但是您可以使用Java 5上引入的并发包中的类,而不是使用wait方法。您可以对要等待的类初始化
CountDownLatch
,等待它的方法应该执行wait()方法,要释放闩锁,您可以调用countDown()方法。在我看来,它比使用wait()更清晰。《有效的Java》一书中有一个关于这个类的非常有趣的主题。

请确保测试这些新并发类“CountdownClatch”和“CyclicBarrier”的性能(概要文件执行)。他们是超级容易使用,但在一个成本。我能够将我的性能提高三倍,但是我花了整整8个小时来实现繁重的单元测试。这实际上是我一直在寻找的答案,它回答了问题的主题。我认为问题的细节是走错了路的证据。即使我也感到害羞!!