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多线程-信号量

java 多线程 28 : 多线程组件之 Semaphore 信号量

Java并发多线程编程——并发工具类Semaphore(信号量)

java----多线程Semaphore信号量

Java多线程并发工具类-信号量Semaphore对象讲解

Java核心-多线程-并发控制器-Semaphore信号量