線程通訊-Semaphore方法演示

1.demo代碼:
package cn.yb.thread;

import java.util.concurrent.Semaphore;

public class WorkerMachineDemo {
	static class Work implements Runnable{
    	private int workerNum;//工人工號
    	private Semaphore semaphore;//機器數
    	public Work(int workerNum,Semaphore semaphore) {
    		this.workerNum = workerNum;
    		this.semaphore = semaphore;		
    	}
		public void run() {
			try {
				//1.工人要去獲取機器
				semaphore.acquire();
				//2.打印工人獲取到機器,開始工作
				String name = Thread.currentThread().getName();
                System.out.println("獲取到機器,開始工作。。。"+name);
    			//3.線程休眠100毫秒,模擬工人使用機器工作過程
                Thread.sleep(1000);
    			//4.使用完畢,釋放機器,打印工人使用完畢,釋放機器
                semaphore.release();
                System.out.println(name+"使用完畢,釋放機器!");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}
    	
    }
    public static void main(String[] args) {
		 int workers = 8;//代表工人數8個
		 Semaphore semaphore = new  Semaphore(3);//代表機器數3個
		 for(int i = 0;i<workers;i++) {
			new Thread(new Work(i, semaphore)).start(); 
		 }
	}
}

2.運行結果:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章