本文共 916 字,大约阅读时间需要 3 分钟。
package com.kuang.add;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(()->{ // acquire() 得到 try { semaphore.acquire();//获取信号量 有就获取,获取后信号量减一,没有信号量了线程就在这里等待,直到有信号量了就会被唤醒 System.out.println(Thread.currentThread().getName()+"抢到车位"); TimeUnit.SECONDS.sleep(2); System.out.println(Thread.currentThread().getName()+"离开车位"); } catch (InterruptedException e) { e.printStackTrace(); } finally { //信号量的释放 信号量的数目加一 并唤醒等待的线程 semaphore.release(); // release() 释放 } },String.valueOf(i)).start(); } }}
当无法获取信号量了 该线程会在这里等待 直到可以获取信号量了
释放,会将当前的信号量释放 + 1,然后唤醒等待的线程!
作用: 多个共享资源互斥的使用!并发限流,控制最大的线程数!
转载地址:http://iohzi.baihongyu.com/