簡要分析:
要求三個線程輪流輸出,這里我們要使用一個對象鎖,讓關鍵部分的代碼放入同步塊當中。同時要有一個變量記錄打印的次數到達10次循環后不再打印,另外一個就是要給每個線程一個標志號,我們根據標識號來輸出對應的信息。
package com.test;
public class PrintOneTwoThree {
public static void main(String[] args) {
Print p1 = new Print(0);
Print p2 = new Print(1);
Print p3 = new Print(2);
new Thread(p1, "p1").start();
new Thread(p2, "p2").start();
new Thread(p3, "p3").start();
while (Thread.activeCount() > 1)
;
System.out.println("Done!");
}
}
class Print implements Runnable {
private static int state = 0;
private int id;
private static Object lock = new Object();
public Print(int id) {
this.id = id;
}
@Override
public void run() {
synchronized (lock) {
while (state < 30) {
if (state % 3 == id) {
switch (id) {
case 0:
System.out.println("["
+ Thread.currentThread().getName() + "]" + "A");
break;
case 1:
System.out.println("["
+ Thread.currentThread().getName() + "]" + "B");
break;
case 2:
System.out.println("["
+ Thread.currentThread().getName() + "]" + "C");
break;
default:
break;
}
state++;
lock.notifyAll();
} else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
