Java信号量Semaphor解析

来源:互联网 发布:淘宝客 群介绍 编辑:程序博客网 时间:2024/06/16 02:35

我们应当知道,信号量代表的是一种有限的访问资源。在多线程的并发操作中,信号量在共享资源的控制中有着很重要的作用。Java中提供的Semaphor类可以对信号量进行操作,调用acquire()方法获取一个许可,如果没有则等待;调用release()方法释放一个许可,如果此时有其他访问者在等待资源许可,那么等待的访问者就会获取到许可。
下面的DEMO中,我们模拟一个场景:一个顾客想去吃汉堡,如果店里面没有现成的汉堡,那么就需要等待厨师做一个。

public class SemaphoreTest {    public static void main(String[] args) {        ExecutorService executor = Executors.newCachedThreadPool();        Semaphore semaphor = new Semaphore(0);        executor.execute(new Runnable() {            @Override            public void run() {                try {                    System.out.println("want to have a hamburger!");                    semaphor.acquire();                    System.out.println("start eat!");                    Thread.currentThread().sleep(1000);                    System.out.println("end!");                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        });        executor.execute(new Runnable() {            @Override            public void run() {                try {                    if(semaphor.availablePermits()==0){                        System.out.println("there is no hamburger,cook make one");                        Thread.currentThread().sleep(1000);                        System.out.println("release a hamburger!");                        semaphor.release();                    }                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        });    }}/**输出结果*/want to have a hamburger!there is no hamburger,cook make onerelease a hamburger!start eat!end!
1 0
原创粉丝点击