12.Semaphore


1.定义

信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制

正常的锁(concurrency.locks或synchronized锁)在任何时刻都只允许一个任务访问一项资源,而 Semaphore允许n个任务同时访问这个资源。

模拟一个抢车位的场景,假设一共有6个车,3个停车位

2.代码演示

package com.mydemo;

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

public class SemaphoreDemo {
    public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(3,false);


        for (int i1 = 0; i1 < 6; i1++) {
            new Thread(()->{
                try {
                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName()+"进来");
                    try {
                        TimeUnit.SECONDS.sleep(2);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"出去");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                semaphore.release();





            },String.valueOf(i1)).start();

        }

    }
}

3.执行结果

0进来
2进来
1进来
1出去
2出去
0出去
4进来
3进来
5进来
3出去
4出去
5出去

相关