Semaphore初识 java信号量

朋友在写抽奖活动的时候,为了控制线程,用到了Semaphore类 ,之前也是没有用到过,就简单认识一下它。

Semaphore,是负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。也是操作系统中用于控制进程同步互斥的量。或者说,简单的来讲,就

是信号量。

比如我们去网吧开机子上网(原谅楼主是个网瘾少年),网吧总共只有100台机子,也就是只可能有100个人同时上网,也就是信号量为100,代码表

的话就是 static Semaphore = new Semaphore(100), 这个时候来了150个人要上网怎么办呢? 没办法,我这最多上100个人,给100个人加上凭证,让他们

上网, 代码模拟下 、

for(int i=0;i<150;i++){//模拟150个准备上网的用户

  Runnable run = new Runnable() {

        public void run() {

                 try {

                        // 获取许可

//网管给上网许可

                       semp.acquire();

                      System.out.println("Accessing: " + i);

                     // 访问完后,释放

//钱用完了,下机,下机几个人,就有几个空机器,给后面的人上网

                     semp.release();

                      System.out.println("-----------------"+semp.availablePermits());

                     } catch (InterruptedException e) {

                      e.printStackTrace();

                     }

                    }

}

只有有人下机后 才会有机器给后来的人用,而semaphore就是设置有几台机器的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值