我没有在multithreading
工作过,加入和等待,通知方法有什么区别?是否仅限于获得lock
的差异,并避免其他threads
访问它或者是否存在其他用例?多线程加入和等待之间的区别,通知
为什么我应该去为multithreading
wait
和notify
时join
可用于thread
执行完毕?
如果有实时的例子已经提供
我没有在multithreading
工作过,加入和等待,通知方法有什么区别?是否仅限于获得lock
的差异,并避免其他threads
访问它或者是否存在其他用例?多线程加入和等待之间的区别,通知
为什么我应该去为multithreading
wait
和notify
时join
可用于thread
执行完毕?
如果有实时的例子已经提供
的join()方法等待线程死亡这将是有益的。 wait()和notify()用于线程间通信。换句话说,这些方法会阻塞线程,直到满足某些条件。
方法join
(的Thread
类)等待线程死亡:
等待该线程死亡。
方法wait
,notify
,notifyAll
不相关的一个线程的执行结束。
方法wait
:
造成当前线程等待,直到其他线程调用notify()方法或此对象的notifyAll的()方法。
https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()
方法notify
和notifyAll
用来唤醒一个沉睡的线程:
唤醒在此对象监视器上等待的单个线程。
wait
的与notify
的一个常见用途是访问共享资源。 当资源不可用时,消费者在显示器上等待。 当生产者创建资源时,它通知(或notifyAll)唤醒等待该资源的线程(或多个线程)。
连接的常见用法是阻止主线程,直到配置线程完成其活动,然后再继续。
join(
):等待此线程死亡。
join方法允许一个线程等待另一个线程的完成。如果T是一个Thread对象,它的线程当前执行,
t.join();
导致当前线程,直到T的线程终止暂停执行。
wait()
:导致当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法。
notify()
:唤醒正在等待该对象监视器的单个线程。如果任何线程正在等待这个对象,则选择其中一个线程来唤醒。
notifyAll()
:唤醒在该对象监视器上等待的所有线程。线程通过调用其中一个等待方法来等待对象的监视器。
请参阅下面的帖子了解更多详情。
Difference between wait() and sleep()
Difference between Synchronized block with wait/notify and without them?
例子:
此实现使用空调上this.wait呼叫的环this.isAlive。由于线程终止this.notifyAll方法调用了 。建议应用程序不要在Thread实例上使用wait,notify或者notifyAll。
等待Thread
终止(和清理)的正确方法是join()
。
的文档建议您不使用wait()
,notify()
或notifyAll()
上Thread
实例。
恕我直言,这是一个错误的增加一个显示器java.lang.Object
。这与大多数类完全无关,膨胀实现并导致不适当的使用。
声明方法的能力也是一个错误。它倾向于延长关键部分,并且如果确实需要(不是这样),则可以将其限制在某些类别(或将其实现为接口的类别),而不是膨胀类别层次结构。
[等待(长时间超时)和连接(长时间毫秒)之间的区别?](http://stackoverflow.com/questions/8818721/difference-between-waitlong-timeout-and-joinlong-millis) – aUserHimself