美文网首页
重入锁的搭档:Condition

重入锁的搭档:Condition

作者: 12点前睡觉hhh | 来源:发表于2019-05-30 14:10 被阅读0次

Condition的作用和obj.wait和obj.notify的作用大致相同。只不过wait和notify方法和synchronized关键字合作使用,而Condition是与重入锁相关联的。
通过ReentrantLock.newCondition方法可以生成一个与当前重入锁绑定的Condition实例对象,利用Condition对象,我们可以让线程在合适的时间等待,或者在某一时刻得到通知继续执行。
Condition接口提供的方法如下:

 void await() throws InterruptedException;
 void awaitUninterruptibly();
 long awaitNanos(long nanosTimeout) throws InterruptedException;
 boolean await(long time, TimeUnit unit) throws InterruptedException;
 boolean awaitUntil(Date deadline) throws InterruptedException;
 void signal();
 void signalAll();

await()会使当前线程等待,同时释放当前锁。当其他线程调用signal方法或者signalAll方法时,线程会重新获得锁并继续执行。或者当前线程被中断时,也能跳出等待。与obj.wait方法相似。
awaitUninterruptibly()与await()方法相似,当时他不会在等待过程中响应中断。
使用实例:

public class ConditionDemo implements Runnable{
    private static ReentrantLock lock=new ReentrantLock();
    private static Condition condition=lock.newCondition();

    @Override
    public void run() {
        try {
            lock.lock();
            condition.await();
            System.out.println("Thread is await");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            lock.unlock();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Thread t1=new Thread(new ConditionDemo());
        t1.start();
        Thread.sleep(1000);
        lock.lock();
        condition.signalAll();
        lock.unlock();
    }
}

相关文章

网友评论

      本文标题:重入锁的搭档:Condition

      本文链接:https://www.haomeiwen.com/subject/mkomtctx.html