首页 > 其他 > 详细

Semaphore使用方法

时间:2019-05-08 21:19:06      阅读:152      评论:0      收藏:0      [点我收藏+]

一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。

构造方法:
Semaphore(int permits)
创建具有给定的许可数和非公平的公平设置的 Semaphore。
Semaphore(int permits, boolean fair)
创建具有给定的许可数和给定的公平设置的 Semaphore。
主要方法:
release(int permits)
释放给定数目的许可,将其返回到信号量。
acquire()
从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。
示列:
线程1会先执行完,然后释放两个线程
线程2和线程3会阻塞知道线程1执行release语句

Semaphore sph = new Semaphore(0); // 初始化释放几个线程
        
        ExecutorService pool = new ThreadPoolExecutor(3, 3, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
        pool.execute(new Thread() {
            @Override
            public void run() {
                
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                print();
                sph.release(2);
            }
        });
        
        pool.execute(new Thread() {
            @Override
            public void run() {
                try {
                    sph.acquire();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                print();
            }
        });
        
        pool.execute(new Thread() {
            @Override
            public void run() {
                try {
                    sph.acquire();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                print();
            }
        });     
    }
    
    private static void print() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().toString() + "*" + i);
        }
    }

Semaphore使用方法

原文:https://www.cnblogs.com/zhz-8919/p/10834498.html

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