美文网首页
JUC-Semaphore

JUC-Semaphore

作者: GIT提交不上 | 来源:发表于2020-03-05 11:19 被阅读0次

      信号量目的:1)用于多个共享资源的互斥使用 2)用于并发线程数的控制。(多对多)

    /**
     * @author luffy
     **/
    public class SemaphoreDemo {
        public static void main(String[] args){
            Semaphore semaphore = new Semaphore(6); //可复用-可伸缩
            for(int i =0 ;i< 10;i++){
                new Thread(()->{
                    try {
                        semaphore.acquire();
                        System.out.println(Thread.currentThread().getName()+":抢到车位!");
                        try {
                            TimeUnit.SECONDS.sleep(3); //停车3s
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName()+":停车3s后离开车位!");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }finally {
                        semaphore.release();
                    }
                },String.valueOf(i)).start();
            }
        }
    }
    

      Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
      CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行;而CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行;另外,CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。
      Semaphore和锁类似,它一般用于控制对某组资源的访问权限。

    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

    相关文章

      网友评论

          本文标题:JUC-Semaphore

          本文链接:https://www.haomeiwen.com/subject/famtrhtx.html