java.util.concurrent.Semaphore是用来控制线程数量,可以用来做限流
Deom如下:
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);
System.out.println(Thread.currentThread().getName() + "离开了");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
//释放,会将当前的信号量释放+1,然后唤醒
semaphore.release();
}
},String.valueOf(i)).start();
}
}
}
-
new Semaphore(3)意思是同时可运行的线程为3个
-
semaphore.acquire()意思是如果已经满了,等待,等待被释放为止
-
semaphore.release()意思是会将当前的信号量释放+1,然后唤醒