首页 > 其他 > 详细

Semaphore(信号量)

时间:2016-03-21 15:21:06      阅读:208      评论:0      收藏:0      [点我收藏+]

信号量,一个计数信号量;用于控制可同时执行的线程总数。
从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。

河面上有五座独木桥,每个独木桥只能承载一个人,100个人要过桥,只能一个一个排队,过桥期间最多只能同时有5个人在过桥(每桥一个人),当某座桥上的人到了对面,马上就会有另外一个人上桥,直到最后100个人都到了对面,怎么做?用Semaphore(信号量)。

常用方法

  • acquire(); // 获得一个许可,没有许可则一直阻塞
  • release(); // 释放一个许可
  • tryAcquire(); //尝试获得一个许可,获取成功返回true,否则false

栗子

public static void main(String[] args) {
        ExecutorService executors=Executors.newFixedThreadPool(20);
        final Semaphore semaphore=new Semaphore(5);

        for(int i=0;i<20;i++){
            final int n=i;
            new Thread(new Runnable() {
                public void run() {
                    try {
                        semaphore.acquire();
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(n);
                    semaphore.release();
                }
            }).start();
        }

    }

Semaphore(信号量)

原文:http://blog.csdn.net/cyantide/article/details/50946208

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!