美文网首页
用实例程序理解Semaphore信号量的作用

用实例程序理解Semaphore信号量的作用

作者: 肥兔子爱豆畜子 | 来源:发表于2021-05-17 10:50 被阅读0次

信号量

Semaphore代表是一组有限资源的使用许可,多个线程通过得到这些许可来同时使用这一组资源。跟线程池一样,可以控制一个过程的并发度。

示例程序

若一个工厂有 5 台机器,但是有 12 个工人,一台机器同时只能被一个工人使用,只有使用完了,其他工人才能继续使用。也就是同时最多只能有5个人在干活(最大并发度为5)。那么我们就可以通过 Semaphore 来实现。

int workerNum = 12; //工人数
        Semaphore semaphore = new Semaphore(5); //机器数
        for(int i=0; i<workerNum; i++) {
            new Thread(new Runnable() {

                @Override
                public void run() {
                    try {
                        semaphore.acquire();
                        logger.info("工人"+Thread.currentThread().getName()+"占用一个机器在生产");
                        Thread.sleep(2000);
                        logger.info("工人"+Thread.currentThread().getName()+"释放出机器");
                        semaphore.release();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    
                }
                
            }).start();
        }

运行结果:

工人Thread-3占用一个机器在生产
工人Thread-2占用一个机器在生产
工人Thread-1占用一个机器在生产
工人Thread-4占用一个机器在生产
工人Thread-5占用一个机器在生产
工人Thread-4释放出机器
工人Thread-3释放出机器
工人Thread-5释放出机器
工人Thread-8占用一个机器在生产
工人Thread-7占用一个机器在生产
工人Thread-1释放出机器
工人Thread-6占用一个机器在生产
工人Thread-2释放出机器
工人Thread-9占用一个机器在生产
工人Thread-11占用一个机器在生产
工人Thread-8释放出机器
工人Thread-10占用一个机器在生产
工人Thread-7释放出机器
工人Thread-12占用一个机器在生产
工人Thread-6释放出机器
工人Thread-9释放出机器
工人Thread-11释放出机器
工人Thread-10释放出机器
工人Thread-12释放出机器

比较一下CountDownLatch, CyclicBarrier, Semaphore这几个多线程协调工具

  • CountDownLatch 线程计数器用于某一个线程要等待其他若干个线程执行完任务之后才可以执行的场景,不可复用。
  • CyclicBarrier 回环栅栏用于若干个线程要都执行到某一个状态,然后再同时继续往下执行的场景。可以复用。
  • Semaphore 信号量有点类似是一组锁。用来控制对一组资源的访问许可。比如用有限个执行许可来控制最大线程并发度。

相关文章

  • 用实例程序理解Semaphore信号量的作用

    信号量 Semaphore代表是一组有限资源的使用许可,多个线程通过得到这些许可来同时使用这一组资源。跟线程池一样...

  • Semaphore(信号量)

    Semaphore(信号量) 作用 Semaphore的作用是控制并发访问的线程数目。 核心方法 示例 获取一个许...

  • 线程间应该怎样协作?

    线程间应该怎样协作? 信号量 Semaphore 作用和用途 限制某一程序或应用的并发线程数,通过信号量许可证的颁...

  • JUC下线程同步类

    这些类为JUC包,他们都起到线程同步作用 Semaphore(信号量) 在现实场景,Semaphore的实现,比如...

  • 浅谈GCD信号量dispatch_semaphore_t

    理解信号量 理解信号量我们必须了解一下三个函数: dispatch_semaphore_create(long v...

  • Semaphore

    Semaphore Semaphore 是 Java 并发包中提供的一个工具类,翻译过来为“信号量”,作用是控制并...

  • dispatch_semaphore_t

    一、信号量 semaphore叫做“信号量” 1、创建信号量dispatch_semaphore_create(l...

  • GCD信号量使用

    一、信号量 semaphore叫做“信号量” 1、创建信号量dispatch_semaphore_create(l...

  • Semaphore 使用详解

    1. Semaphore 是什么? Semaphore 字面意思是信号量的意思,它的作用是控制访问特定资源的线程数...

  • 同步工具类之Semaphore

    一,计数信号量(Counting Semaphore)概述 计数信号量(Counting Semaphore)用来...

网友评论

      本文标题:用实例程序理解Semaphore信号量的作用

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