题目:
编写程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印十次,要求输出结果必须按照ABC的顺序显示,如:ABCABCACB…
方法一:指定线程唤醒轮循打印,使用ReentrantLock和Condition。
本方法空间开销较大,因为使用了三个条件对象,但是本方法是定点唤醒线程,并不会产生额外的上下文切换开销。总体来说,本方法性能更优。
package ThreadDemo.ThreadExercise;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
class Demo3 implements Runnable{
private ReentrantLock lock;
private static volatile String nw;
private int i;
private Condition me;
private Condition next;
private String nextName;
public Demo3(String nextName,ReentrantLock lock,Condition me,Condition next) {
this.lock=lock;
this.i=0;
this.next=next;
this.me=me;
this.nextName=nextName;
}
public static void setNW(String s){
nw=s;
}
@Override
public void run() {
while(i++<10){
lock.lock();