首先是类似的案例,比如说排队买票的问题,假如有20个人一起买票,只有两个窗口,怎么实现分析:人=线程2个窗口--资源在窗口买票=线程正在执行离开线程执行完毕等待买票=线程阻塞
工具/原料
1
信号量
2
Semaphore
方法/步骤
1
首先明确信号量Semaphore的用法,然后新建一个项目,new-->file-->class,随意命名,此处命名为semaphoreDemo
2
首先开始一个线程MyTask,实现接口,然后在其中定义窗口买票的流程,主要有进入,买完了,离开,然后释放信号量,让下一个进入
3
然后设定一个信号量,主要是执行函数,此处定义窗口个数,然后定义线程池ExecutorService,循环执行这20个人
4
最后通过main函数调用execute函数进行排队问题,开始排队线程
5
在打印中可以看到两个线程在并发执行,剩下的人处于排队状态,只有上一个执行完了下一个才执行
注意事项
线程信号量semaphore,主要用于控制并发数
上一篇:能力出众者的困局