首先明确每一个线程都会有自己的一个私有的执行方法,代码里面为(print函数)。然后有一个问题是打印结果前三个字符没有打印‘*’,说明锁没被释放,但是没问题,有点迷~~,还有main线程没有结束~~,我先挖个坑!!!
上代码:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class ConditionTest {
public static ReentrantLock lock = new ReentrantLock();
public static Condition condition1 = lock.newCondition();
public static Condition condition2 = lock.newCondition();
public static Condition condition3 = lock.newCondition();
public static void main(String[] args) {
//线程名字为thread1
new Thread(() -> print('a', condition1, condition2), "thread1").start();
//线程名字为thread2
new Thread(() -> print('A', condition2, condition3), "thread2").start();
//线程名字为thread3
new Thread(() -> print('0', condition3, condition1), "thread3").start();
}
public static void print(char letter,Condition conditionNow,Condition conditionNew){
for (int i = 0; i < 10; i++) {
try {
lock.lock();
System.out.print((char) (letter + i));
Thread.sleep(300);
conditionNew.signal();
conditionNow.await();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//测试是否每次都释放了锁
System.out.print("*");
lock.unlock();
}
}
}
}
输出结果:
可以看出main线程没有结束~~~