Semaphore工具类使用
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,然后唤醒
当你发现自己的才华撑不起野心时,就请安静下来学习吧