版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/axuanqq/article/details/81841076
java semaphore实现信号灯
semaphore可以维护当前访问自身的线程个数,并提供了相应的同步机。使用semaphore可以控制同时访问资源的线程个数.
例如:实现一个文件允许的并发访问数.
semaphore实现的功能就类似测试所有的5个坑,假如有是个人要上测试,那么统发能有多少个人去上测试呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中等待的的另外5个人又可以占用了.
另外等待的5个人中可以随机获取优先机会,也可以是按照先来后到的顺序获取机会,这取决于狗爪semaphore对象传入的参数选项
单个信号量的semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁:
实例:
public static void main(String[] args) {
final int permits = 3;
Semaphore semaphore = new Semaphore(permits);
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
@Override
public void run() {
try {
semaphore.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(String.format("当前已有%s个线程并发",(permits-semaphore.availablePermits())));
semaphore.release();
}
}).start();
}
}
运行结果:
当前已有2个线程并发
当前已有1个线程并发
当前已有3个线程并发
当前已有2个线程并发
当前已有3个线程并发
当前已有3个线程并发
当前已有3个线程并发
当前已有3个线程并发
当前已有3个线程并发
当前已有3个线程并发