Java并发多线程编程——Semaphore

x33g5p2x  于2022-01-07 转载在 Java  
字(0.8k)|赞(0)|评价(0)|浏览(417)

一、Semaphore概述

  • Semaphore的字面意思是信号量。
  • Semaphore主要用于两个目的:
    (1)、一个是用于多个共享资源的相互排斥使用。
    (2)、另一个用于并发资源数的控制.。

二、Semaphore代码示例

模拟有限个车位,多个车辆抢车位案例。

  • 代码
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/** * @description: 抢车位案例 * @author: xz */
public class SemaphoreDemo {
    public static void main(String[] args) {
        robCar();
    }

    private static void robCar(){
        //模拟5个停车位
        Semaphore semaphore = new Semaphore(5);
        for (int i = 1; i <= 10; i++) {
            new Thread(()->{
                try {
                    semaphore.acquire();//抢到资源

                    System.out.println("线程:"+Thread.currentThread().getName() + "\t抢到车位");
                    try {
                        TimeUnit.SECONDS.sleep(3);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("线程:"+Thread.currentThread().getName() + "\t 停3秒离开车位");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    semaphore.release();//释放资源
                }
            },String.valueOf(i)).start();
        }

    }
}
  • 输出结果如下图:

相关文章