Java信号量Semaphor解析

我们应当知道,信号量代表的是一种有限的访问资源。在多线程的并发操作中,信号量在共享资源的控制中有着很重要的作用。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 one
release a hamburger!
start eat!
end!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值