synchronized和Lock每次只允许1个线程获取锁(访问1个共享资源)—>扩展一下锁—>Semaphore信号量(指定多个线程同时访问共享资源)
构造函数:
- public Semaphore(int permits); //准入数,多个线程可最多申请的许可数,即允许最多多少线程同时访问共享资源
- public Semaphore(int permits, boolean fair);
原理:
构造信号量对象时指定准入数,每个线程每次只申请一个许可时===》相当于指定同时多少个线程可以访问共享资源
semaphore.require():获得,假如已经满了,等待,等待被释放为止
semaphore.release():释放,释放当前信号量,然后唤醒等待的线程
作用:多个共享资源互斥的使用!并发限流!控制最大的线程数!
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(2);
for (int i = 0; i < 6; i++) {
Thread thread = new Thread() {
@Override
public void run() {
try {