介绍不多说 https://www.cnblogs.com/nullzx/p/5270233.html
Semaphore初始化时给一个数值,就是释放的信号数量,决定着多少线程可以同步执行。
方法acquire()获取信号,当所有信号被占用时,便会阻塞直到获取到。
方法release()释放信号,当我代码执行完成,占用的信号的便可释放让其他线程通行。
实例:
ExecutorService executorService = Executors.newFixedThreadPool(4);
final Semaphore semaphore = new Semaphore(2);
for (int i = 0; i < 4; i++) {
executorService.execute(new Runnable() {
public void run() {
try {
semaphore.acquire();
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()) + "获得信号量时间");
TimeUnit.SECONDS.sleep(30);
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
executorService.shutdown();
执行结果
10:50:15获得信号量时间
10:50:16获得信号量时间
10:50:45获得信号量时间
10:50:46获得信号量时间
尊重作者,转载请注明出处!
版权申明:本文版权归作者所有,未经授权,任何单位或个人不得以任何形式转载、摘编或利用其它方式使用本博客内容。作者保留追究相关法律责任的权利。如需使用博客内容,请与作者联系获得授权。感谢对本文的尊重与支持。
免责声明:本网站所载内容仅供参考,不构成任何专业建议。用户基于本网站内容作出的决策,风险自担。对于因使用本网站内容而产生的任何直接或间接损失,本网站不承担任何责任。请用户审慎判断,理性使用。