目录
五、CountDownlatch和CyclicBarrier以及Semaphor的区别是
一、Semaphor作用
控制并发线程数
用于多个共享资源互斥使用。【也就是具有锁的功能】
二、应用场景
用于做流量控制,特别公用资源有限的应用场景,比如数据库连接
三、重要方法
1、semaphore.acquire();
请求一个信号量,这时候信号量个数-1,当减少到0的时候,下一次acquire不会再执行,只有当执行一个release()的时候,信号量不为0的时候才可以继续执行acquire
2、semaphore.release();
释放一个信号量,这时候信号量个数+1,
四、例子-控制某个方法允许并发访问线程的个数
原地址:https://www.cnblogs.com/felixzh/p/11971735.html
public class SemaphoreTest {
private static Semaphore semaphore = new Semaphore(2);
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
threadLog();
}).start();
}
}
private static void threadLog() {
try {
semaphore.acquire();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("线程:" + Thread.currentThread().getName() + "执行了一个acquire请求操作");
try{
TimeUnit.SECONDS.sleep(1);
}catch (Exception ex){
ex.printStackTrace();
}
semaphore.release();
System.out.println("线程:"+Thread.currentThread().getName()+"执行了一个release请求操作");
}
}
五、CountDownlatch和CyclicBarrier以及Semaphor的区别是
例子:https://www.cnblogs.com/wangsen/p/11170709.html
-
CountDownLatch是做减法,CyclicBarrier是做加法, Semaphor的临界资源可以反复使用
-
CountDownLatch不能重置计数,CycliBarrier提供的reset()方法可以重置计数,不过只能等到第一个计数结束。Semaphor可以重复使用。
-
CountDownLatch和CycliBarrier不能控制并发线程的数量,Semaphor可以实现控制并发线程的数量。