模拟场景:
北京开往邯郸的火车K7761开始售票,在9号站台验票进站,进站口只有三个,许许多多的乘客排成长队验票进站。
那么此时三个进站口就是有限的公共资源,乘客们就是线程。
Semaphore信号量是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。
public class testMain { public static void main(String[] args) { int ticketGate = 3;//检票口 int numberOfPassengers = 9527;//乘客数量d Semaphore semaphore = new Semaphore(ticketGate); //允许进入3人,剩下的人想进入时,需等待前面的人已经进入站。 for (int i = 0; i < numberOfPassengers; i++) { new Through(i,semaphore).start(); } } static class Through extends Thread{ private int n; private Semaphore semaphore; public Through(int n,Semaphore semaphore){ this.n = n; this.semaphore = semaphore; } @Override public void run(){ try { semaphore.acquire();//占用进站口 System.out.println(n+"号乘客doing"); Thread.sleep(2000);//2秒的进站时间 semaphore.release();//进入站 System.out.println(n+"号乘客ok"); } catch (InterruptedException e) { e.printStackTrace(); } } } }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于