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.运行结果: