线程通讯-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.运行结果:

线程通讯-Semaphore方法演示_第1张图片

你可能感兴趣的:(多线程,thread,semaphore)