Java并发多线程编程——Semaphore

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发多线程编程——Semaphore相关的知识,希望对你有一定的参考价值。

一、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();
            
    
        
    
    
  • 输出结果如下图:

以上是关于Java并发多线程编程——Semaphore的主要内容,如果未能解决你的问题,请参考以下文章

java并发编程之Semaphore

并发编程Semaphore详解

java多线程系列:一 并发工具类的使用_2 ( CountDownLatch CyclicBarrier Semaphore Exchanger )

Semaphore替换多线程synchronized解决并发环境死锁,Java

Java多线程同步工具类之Semaphore

java多线程10:并发工具类CountDownLatchCyclicBarrier和Semaphore