兩個線程交替打印的實現方式,此處藉助SynchronizedQueue這個類來實現。此類有兩個操作take(), put(?) ,只有當兩個線程分別同時調用take, put 時纔會調用返回,故利用此類的這個特性來實現交替打印。代碼參考如下:
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
/**
* 交替打印的實現
* 使用SQ SynchronizedQueue
*
* 一個打印1~10
* 一個打印A~Z
* 循環
*
* @author [email protected]
* @date 2019/12/27 0027 下午 3:07
*/
public class RotatePrint {
public static void main(String[] args) {
SynchronousQueue q0 = new SynchronousQueue();
SynchronousQueue q1 = new SynchronousQueue();
Runnable worker0 = ()->{
int i = 0;
while(true){
try {
q0.take();
System.out.printf("%d",(i++)%10 + 1);
q1.put("");
TimeUnit.MILLISECONDS.sleep(200L);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
};
Runnable worker1 = ()->{
short i = 'A';
while(true){
try {
q1.take();
System.out.printf("%c",i++);
q0.put("");
if(i > 'Z'){
i = 'A';
}
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
};
System.out.printf("%s:\t","BEGIN");
new Thread(worker0).start();
new Thread(worker1).start();
try {
q0.put("");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}