面試題--三個執行緒迴圈列印ABC 10次:另類解決方法
阿新 • • 發佈:2019-01-01
看到網上有各種寫法,但總感覺的看起來晦澀難懂。於是自己寫了一個,如下:
import java.util.concurrent.atomic.AtomicBoolean; class Printer extends Thread { public AtomicBoolean canPrint; private String _text; private Printer _nextPrinter; Printer(String name) { canPrint = new AtomicBoolean(false); this._text = name; } public void SetNextPrinter(Printer nextPrinter) { this._nextPrinter = nextPrinter; } @Override public void run() { int count = 10; while (count > 0) { if(canPrint.compareAndSet(true, false)) { count--; System.out.println(count +" - " + _text); _nextPrinter.canPrint.set(true); } } } } public class TestPrinter { public static void main(String[] args) { Printer printerA = new Printer("A"); Printer printerB = new Printer("B"); Printer printerC = new Printer("C \n----------------- \n"); printerA.SetNextPrinter(printerB); printerB.SetNextPrinter(printerC); printerC.SetNextPrinter(printerA); printerA.canPrint.set(true); printerA.start(); printerB.start(); printerC.start(); return; } }
輸出如下:
9 - A
9 - B
9 - C
-----------------
8 - A
8 - B
8 - C
-----------------
7 - A
7 - B
7 - C
-----------------
6 - A
6 - B
6 - C
-----------------
5 - A
5 - B
5 - C
-----------------
4 - A
4 - B
4 - C
-----------------
3 - A
3 - B
3 - C
-----------------
2 - A
2 - B
2 - C
-----------------
1 - A
1 - B
1 - C
-----------------
0 - A
0 - B
0 - C
-----------------