Semaphore初识 java信号量

时间:2022-06-14 15:14:08

朋友在写抽奖活动的时候,为了控制线程,用到了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就是设置有几台机器的