并发控制 - Semaphore(信号量)
Semaphore用来控制访问特定资源的线程数量。它通过协调各个线程来保证合理的公共资源的合理使用。
Semaphore用来保护一个或多个共享资源的访问。比如:多个厕所坑位的使用、多台打印机的使用。
Semaphore内部有一个计数器,其值是可以访问的公共资源的个数。
一个线程想要访问共享资源,首先得获得信号量,只有当信号量计数器值不等0时,才可以有权访问共享资源。
当有权访问时,线程得先将计数器减1,再去访问共享资源。
若计数器值为0,线程则会进入休眠。只有当某个线程使用完共享资源释放信号量时,休眠的线程才会被唤醒并试图获取信号量。
// 默认非公平, permits为运行同时运行的线程数目
public Semaphore(int permits);
// fair=true为公平,公平是指获得锁的顺序和线程启动的顺序有关
public Semaphore(int permits,boolean fair);
// 获取信号量
semaphore.acquire();
// 释放信号量
semaphore.release();
// 尝试获取信号量,返回值boolean
semaphore.tryAcquire();

浙公网安备 33010602011771号