但范甘迪发
package com.ahua.javaBaseTest;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class ReenterLockCondition implements Runnable {
public static ReentrantLock lock = new ReentrantLock();
public static Condition condition = lock.newCondition();
@Override
public void run() {
try{
System.out.println("enter into Thread");
lock.lock();
System.out.println(" Thread ready to wait");
condition.await();
System.out.println("Thread is going on");
}catch(InterruptedException e){
e.printStackTrace();
}finally{
System.out.println("Thread await to unlock");
lock.unlock();
}
}
public static void main(String[] args) throws InterruptedException {
ReenterLockCondition rl = new ReenterLockCondition();
Thread t1 = new Thread(rl);
t1.start();
Thread.sleep(2000);
//通知线程T1继续执行
System.out.println("main Thread to lock ");
lock.lock();
System.out.println("main Thread to signal ");
condition.signal();
System.out.println("main Thread signal back");
lock.unlock();
Thread.sleep(2000);
System.out.println("main Thread to unlock ");
}
}
运行结果如下:
enter into Thread
Thread ready to wait
main Thread to lock
main Thread to signal
main Thread signal back
Thread is going on
Thread await to unlock
main Thread to unlock
如果删除代码里面最后的lock.unlock(),执行结果如下:
enter into Thread
Thread ready to wait
main Thread to lock
main Thread to signal
main Thread signal back
main Thread to unlock