美文网首页
主要并发工具类-Semaphore的使用

主要并发工具类-Semaphore的使用

作者: 飞奔吧牛牛 | 来源:发表于2020-02-11 05:40 被阅读0次

Semaphore 是信号量的意思,通过信号量可以对同一资源访问做数量的限制。
同一时刻最多有多少线程访问,超过的就要等待,当之前的线程让出去时,后面的线程才能继续访问。

        Semaphore semaphore = new Semaphore(10);
        Random random = new Random();
        //开启100个线程
        for (int i = 0; i < 100; i++) {
            new Thread(() -> {
                try {
                    //最多有10个线程申请许可成功,其他线程阻塞在这里!
                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName() + " 从信号量申请许可");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //使用随机数设置占用资源时间
                try {
                    int time = random.nextInt(10) * 100;
                    Thread.sleep(time);
                    System.out.println(Thread.currentThread().getName() + " 占用资源" + time + "毫秒");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //释放许可给信号量
                semaphore.release();
                System.out.println(Thread.currentThread().getName() + " 释放许可,将其返回信号量");
            }, "线程->" + i).start();
        }

结果:

线程->0 从信号量申请许可
线程->1 从信号量申请许可
线程->2 从信号量申请许可
线程->3 从信号量申请许可
线程->4 从信号量申请许可
线程->5 从信号量申请许可
线程->6 从信号量申请许可
线程->7 从信号量申请许可
线程->8 从信号量申请许可
线程->9 从信号量申请许可
线程->8 占用资源0毫秒
线程->10 从信号量申请许可
线程->8 释放许可,将其返回信号量
线程->2 占用资源300毫秒
线程->7 占用资源300毫秒
线程->2 释放许可,将其返回信号量
线程->11 从信号量申请许可
线程->12 从信号量申请许可
线程->7 释放许可,将其返回信号量
线程->6 占用资源400毫秒
线程->6 释放许可,将其返回信号量
......
线程->93 释放许可,将其返回信号量
线程->92 占用资源400毫秒
线程->95 占用资源300毫秒
线程->92 释放许可,将其返回信号量
线程->95 释放许可,将其返回信号量
线程->97 占用资源300毫秒
线程->97 释放许可,将其返回信号量
线程->86 占用资源800毫秒
线程->86 释放许可,将其返回信号量
线程->84 占用资源900毫秒
线程->84 释放许可,将其返回信号量
线程->99 占用资源400毫秒
线程->99 释放许可,将其返回信号量
线程->88 占用资源900毫秒
线程->88 释放许可,将其返回信号量
线程->98 占用资源600毫秒
线程->98 释放许可,将其返回信号量
线程->90 占用资源900毫秒
线程->90 释放许可,将其返回信号量
线程->96 占用资源900毫秒
线程->96 释放许可,将其返回信号量

相关文章

  • 主要并发工具类-Semaphore的使用

    Semaphore 是信号量的意思,通过信号量可以对同一资源访问做数量的限制。同一时刻最多有多少线程访问,超过的就...

  • 并发工具类 Semaphore

    上篇介绍了内部使用AQS的并发工具类CountDownLatch,接下来我要介绍的并发工具类Semaphore内部...

  • Java并发编程之工具类

    一、并发工具类 JDK1.5 引入常用并发工具类:CountDownLatch/Semaphore/CyclicB...

  • Semaphore源码分析

    1. Semaphore 定义 Semaphore 主要用于限量控制并发执行代码的工具类, 其内部通过 一个 pe...

  • Semaphore 源码分析 (基于Java 8)

    1. Semaphore 定义 Semaphore 主要用于限量控制并发执行代码的工具类, 其内部通过 一个 pe...

  • 高并发(10)- 线程并发工具类-Semaphore

    @[TOC](高并发(10)- 线程并发工具类-Semaphore) 前言 上篇文章讲解了线程的并发工具类之Cyc...

  • 并发工具类

    ------本文主要记录CountDownLatch,CyclicBarries、Semaphore工具提供的并发...

  • 详解java中的同步工具类Semaphore

    Semaphore是java并发包里面的一个工具类,我们限制可以访问某些资源的线程数目就可以使用Semaphore...

  • 并发工具类-Semaphore

    1.使用示例 多个线程从数据库池拿固定数量的连接,用完归还数据库池。用信号量来控制数据库池可用连接的数量,进行流控...

  • Semaphore

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

网友评论

      本文标题:主要并发工具类-Semaphore的使用

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