JUC练习7——信号量semaphore

1,信号量是什么

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

2,信号量的应用场景

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

3,代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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 @   陈建江  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示