JUC练习7——信号量semaphore

1,信号量是什么

用于表明可用的互斥资源个数,由此作为标志,使得多个进程互斥的使用互斥资源

2,信号量的应用场景

多个进程需要互斥的访问少量资源

3,代码示例

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

public class JucTest7
{
    public static void main(String[] args)
    {
        /**
         * 信号量Semaphore的简单使用
         * 模拟6辆车来争抢3个停车位的事件(多个进程互斥访问有限的资源)
         * 进程尝试获取position的时候,如果position没有了,就等待。
         * 一旦进程释放了position就会唤醒正在等待的进程去获取position
         */
        Semaphore position = new Semaphore(3);
        for (int i=1;i<=6;i++)
        {
            new Thread(()->
            {
                try {
                    position.acquire();//获取车位
                    System.out.println(Thread.currentThread().getName()+"获取到车位");
                    TimeUnit.SECONDS.sleep(2);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
                finally
                {
                    System.out.println(Thread.currentThread().getName()+"释放车位");
                    position.release();
                }
            },"A"+i).start();
        }
    }
}

  

 

posted @ 2022-01-14 13:09  陈建江  阅读(78)  评论(0编辑  收藏  举报