1、在JDK 1.5之前,主要使用wait,notify ,notifyAll.执行条件操作中的等待和唤醒。
2、JDK1.5之后引入条件变量,他可以让一个线程在条件不满足的情况下一直等待,直到有线程唤醒他。
3、condition与wait、notify、的不同
1、他允许在一个对象上可以有多个等待集合
2、
4、用Lock创建condition对象
Lock lock =new ReentrantLock();
Condition notFull=lock.newCondition();
Condition notEmpty=lock.newCondition();
5、常用方法
**await**
使当前线程在被唤醒或者被中断之前,一直出啊与等待状态
当一个线程调用了await方法,线程进入阻塞状态,这是线程自身无法解除阻塞,需要其他线程来帮忙,否则该线程永远不会再执行,
解除:
a、某个线程在当前条件对象上调用方法singal,而该线程正好被选中
b、调用singalAll方法
c、其他线程调用该线程的的interrupt方法
**singal**
唤醒一个正在等待的线程,唤醒后仍要重新获取锁,如果获取成功,则离开await方法,否则将会继续等待
**singalAll**
唤醒所有等待线程,被唤醒的线程竞争锁,得到锁的线程才能离开await方法,其他没有锁的线程将会继续等待
条件变量(condition)
最新推荐文章于 2023-05-30 22:32:47 发布