使用Java 多線程編程 讓三個線程輪流輸出ABC,循環10次后結束


簡要分析:

要求三個線程輪流輸出,這里我們要使用一個對象鎖,讓關鍵部分的代碼放入同步塊當中。同時要有一個變量記錄打印的次數到達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();
					}
				}
			}
		}
	}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM