2018.4.17 java多線程練習二模擬開場儀式進場


2、某公司組織年會,會議入場時有兩個入口,在入場時每位員工都能獲取一張雙色球彩票,假設公司有100個員工,利用多線程模擬年會入場過程,

並分別統計每個入口入場的人數,以及每個員工拿到的彩票的號碼。線程運行后打印格式如下:
編號為: 2 的員工 從后門 入場! 拿到的雙色球彩票號碼是: [17, 24, 29, 30, 31, 32, 07]
編號為: 1 的員工 從后門 入場! 拿到的雙色球彩票號碼是: [06, 11, 14, 22, 29, 32, 15]
//.....
從后門入場的員工總共: 13 位員工
從前門入場的員工總共: 87 位員工

package com.lanqiao.demo9;

/**
 * 在測試類中主要是實例化子進程  創建進程
 * 啟動進程 不要調用run'方法 start 
 * 
 * @author qichunlin
 *
 */
public class Test {
	public static void main(String[] args) {
		// 實例化子進程
		myThread mt = new myThread();

		// 創建進程
		Thread t1 = new Thread(mt, "前門");
		Thread t2 = new Thread(mt, "后門");
		// 啟動進程
		t1.start();
		t2.start();
	}
}

package com.lanqiao.demo9;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 *  進場類
 * @author qichunlin
 *
 */
public class Entering implements Runnable {

	// 前門人數
	private int frontNum = 0;
	// 后門人數
	private int backNum = 0;
	// 總人數
	private int person = 100;

	@Override
	public void run() {
		// 線程體
		// 1、統計人數
		while (true) {
			synchronized (this) {
				try {
					Thread.sleep(10);
					// 獲取線程名稱
					String threadName = Thread.currentThread().getName();
					// 1-1:總人數<0,退出循環
					if (person < 0) {
						return;
					}
					// 1-2:總人數>0,
					if (person > 0) {
						// 統計前門人數
						if ("前門".equals(threadName)) {
							System.out.println("編號為: "+(100-person+1)+" 的員工 從前門 入場!拿到的雙色球彩票號碼是: "+this.show());
							frontNum++;
						}
						// 統計后門人數
						if ("后門".equals(threadName)) {
							System.out.println("編號為: "+(100-person+1)+" 的員工 從后門 入場!拿到的雙色球彩票號碼是: "+this.show());
							backNum++;
						}
						person--;
					}
					// 1-3:總人數==0,顯示前門人數及后門人數
					if (person == 0) {
						System.out.println("前門人數:"+frontNum);
						System.out.println("后門人數:"+backNum);
						person--;
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}

	// 2、顯示雙色球結果
	public List<Integer> show() {
		//7  創建集合
		List<Integer> list = new ArrayList<Integer>();
		
		for (int i = 0; i <7; i++) {
			Random r = new Random();
			int num = r.nextInt(33)+1;
			list.add(num);
		}
		return list;
	}

}


免責聲明!

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



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