Java的notify,wait,notifyAll方法使用介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010841296/article/details/77344559

wait, notify, notyfyAll 都是Object里面的方法,每个Object其实自身都带有一个隐形锁。

一般wait和notify都是要配合synchronized一起使用的

假设线程A执行一下代码,首先获得test的锁,然后test调用wait方法(在线程A中调用wait方法的时候,线程A会释放test的锁)

String test = "";
synchronized( test ){
    test.wait();
    //do something
}

这时候线程B获得了线程的锁,并调用了test的notify方法,然后睡眠1s,此时线程A只是被唤醒了,但是并不能do something,因为线程B还没有释放掉test的锁,所以此时线程A进入了竞争test的锁的状态。直到线程A获得了test的锁,线程A才能继续do something

synchronized( test ){
    test.notify();
    Thread.sleep(1000);
}

如果理解了上面的东西,那么对于notifyAll方法就简单了,就是唤醒所有的调用test.wait()方法的线程,并让唤醒的线程进入竞争test锁的状态。当有一个线程争夺到锁,那么其他线程继续等待并争夺锁。

猜你喜欢

转载自blog.csdn.net/u010841296/article/details/77344559