Java并发

来源:互联网 发布:asp淘宝客源码 编辑:程序博客网 时间:2024/06/13 12:18

LockSupport工具

提供的方法

void park():阻塞当前线程,如果调用unpark()或者当前线程被中断,才能从park()方法中返回

void park(long nanos):阻塞当前线程最多nanos纳秒

void parkUntil(long deadline):阻塞当前线程知道deadline

void unpark(Thread thread):唤醒处于等待状态的线程thread


Condition接口

任意一个java对象,都有一组监视器方法(定义于Object对象上),如wait(),notify(),notifyAll(),与synchronized关键字配合,可以实现等待/通知模式。

提供的方法

void await():当前线程进入等待状态直到被通知或中断,当前线程进入运行状态且从await()返回的条件是:(1)其它线程调用该condition的signal()或signalAll()方法,而当前线程被选中唤醒;(2)其它线程(调用interrupt())中断该线程;(3)如果当前线程从await()返回,说明其获得了condition对象的锁。

void signal():唤醒一个等待在condition上的线程,该线程从await()返回时必须获得该condition的锁

void signalAll():唤醒所有等待在condition上的线程,能够返回的线程必须获得condition的锁

condition对象如何创建

调用Lock方法的newCondition(),如

Lock lock = new ReentrantLock();Condition condition = lock.newCondition();
如何通过condition实现有界队列

分别新建2个condition对象。如果队列已满,则阻塞当前插入线程,否则插入元素,且唤醒一个获取线程;如果队列已空,则阻塞当前获取线程,否则获取元素,并唤醒一个插入线程。调用condition的方法时必须获取对象的锁。

原创粉丝点击