java多线程 Semaphore 信号量 限流线程
Posted 500年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多线程 Semaphore 信号量 限流线程相关的知识,希望对你有一定的参考价值。
Semaphore 信号量 限流线程
说明
semaphore.acquire();获得,假设已满,则等待,等待释放后位置。
semaphore.release();释放,会将当前的信号量+1,然后唤起等等线程!
作用:多个共享资源互斥时使用,并非限流,控制最大的线程数。
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
public class SemaphoreDemo {
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(3);
for (int i = 1; i <= 6; i++) {
new Thread(() -> {
try {
semaphore.acquire();// 抢到停车位
System.out.println(Thread.currentThread().getName() + " 线程抢到停车位");
TimeUnit.SECONDS.sleep(2);// 停车2秒
System.out.println(Thread.currentThread().getName() + " 线程离场");
} catch (Exception e) {
e.printStackTrace();
} finally {
semaphore.release();// 离开
}
}, String.valueOf(i)).start();
}
}
}
执行结果
2 线程抢到停车位
3 线程抢到停车位
1 线程抢到停车位
3 线程离场
2 线程离场
1 线程离场
5 线程抢到停车位
4 线程抢到停车位
6 线程抢到停车位
6 线程离场
5 线程离场
4 线程离场
特别鸣谢:狂神说Java老师的无私奉献
.
.
.
上一篇 java多线程(二) CountDownLatch减法计数器
下一篇 java多线程(四)ReadWriteLock读写锁
以上是关于java多线程 Semaphore 信号量 限流线程的主要内容,如果未能解决你的问题,请参考以下文章
java 多线程 28 : 多线程组件之 Semaphore 信号量