-
Notifications
You must be signed in to change notification settings - Fork 780
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-07-23:Java 线程中notify 和 notifyAll有什么区别? #104
Comments
notify 和 notifyAll是object的方法 当线程状态为等待、超时等待会调用notify 和 notifyAll方法通知线程更改状态,此时 |
notify方法 |
当线程处于等待、超时等待的时候会调用notify和notifyAll通知线程更改状态,当只有一个线程的时候,这两个效果一样,会唤醒一个线程并获取锁。当线程数量大于1的时候notify会唤醒一个线程,nitifyAll会唤醒所有线程并选取其中一个线程获取锁。 |
notify和notifyall都是object的方法 |
notify、notifyAll和wait()是Java同步机制中的重要组成部分,与synchronized关键字结合使用。 |
两者都是将等待线程中的线程调动至锁池,竞争锁对象,获得执行权,notify()是将等待池中的任意一个调至锁池,与锁池中的其他线程争夺锁对象,notifyAll()是将等待池中的全部线程调至锁池中。前者一般适用于仅有一个线程有效执行的情况,后者一般作用在全部。 |
区别 这还要从对象内部锁的调度说起。 对象内部锁 锁池:假如已经有线程A获取到了锁,这时候又有线程B需要获取这把锁(比如需要调用synchronized修饰的方法或者需要执行synchronized修饰的代码块),由于该锁已经被占用,所以线程B只能等待这把锁,这时候线程B将会进入这把锁的锁池。 锁池与等待池的区别:等待池中的线程不能获取锁,而是需要被唤醒进入锁池,才有获取到锁的机会。 |
No description provided.
The text was updated successfully, but these errors were encountered: