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 信号量 限流线程的主要内容,如果未能解决你的问题,请参考以下文章