Java的信号量主要的作用是控制线程对资源的访问例如我一个线程池里面有100个线程等待执行,但是我允许最多同时运行5个线程,这5个线程只有其中一个线程执行完毕后,在线程池中等待的线程才能进入开始执行,我们可以这样设计程序:

/**
* 该示例展示了如何使用信号量
* @author Administrator
*
*/
public class MySemaphore { public static void main(String[] args) throws IOException, InterruptedException {
final Semaphore semaphore = new Semaphore(5);
ExecutorService exec = Executors.newCachedThreadPool();
for (int i = 0; i < 20; i++) {
final int num = i;
Runnable task = new Runnable() {
@Override
public void run() {
try {
semaphore.acquire();
System.out.println("计算器:" + num + " 可用信号量:" + semaphore.availablePermits());
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
exec.submit(task);
}
}
}

aaarticlea/png;base64,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" alt="" />

Java多线程的信号量的更多相关文章

  1. java多线程-Semaphore信号量使用

    介绍 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确.合理的使用公共资源. 概念 Semaphore分为单值和多值两种,前者 ...

  2. Java多线程系列——信号量:Semaphore

    简介 信号量为多线程协作提供了更为强大的控制方法.也可以说,信号量是对锁的扩展.无论是内部锁 synchronized 还是重入锁 ReentrantLock,一次都只允许一个线程访问一个资源,而信号 ...

  3. java多线程----Semaphore信号量

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  4. Java多线程_Semaphore信号量

    概念: Semaphore是信号量,又称为信号灯,它可以控制某个共享资源可被同时访问的次数,即可以维护当前访问某一共享资源的线程个数,并提供了同步机制.当Semaphore的个数变成1时,即代表只允许 ...

  5. Java多线程并发工具类-信号量Semaphore对象讲解

    Java多线程并发工具类-Semaphore对象讲解 通过前面的学习,我们已经知道了Java多线程并发场景中使用比较多的两个工具类:做加法的CycliBarrier对象以及做减法的CountDownL ...

  6. java 多线程 一个博客

    http://blog.csdn.net/a352193394/article/category/2563875 Java多线程之~~~线程安全容器的非阻塞容器 在并发编程中,会经常遇到使用容器.但是 ...

  7. Java多线程系列——从菜鸟到入门

    持续更新系列. 参考自Java多线程系列目录(共43篇).<Java并发编程实战>.<实战Java高并发程序设计>.<Java并发编程的艺术>. 基础 Java多线 ...

  8. Java多线程系列--“JUC锁”11之 Semaphore信号量的原理和示例

    概要 本章,我们对JUC包中的信号量Semaphore进行学习.内容包括:Semaphore简介Semaphore数据结构Semaphore源码分析(基于JDK1.7.0_40)Semaphore示例 ...

  9. [java多线程] - 锁机制&同步代码块&信号量

    在美眉图片下载demo中,我们可以看到多个线程在公用一些变量,这个时候难免会发生冲突.冲突并不可怕,可怕的是当多线程的情况下,你没法控制冲突.按照我的理解在java中实现同步的方式分为三种,分别是:同 ...

随机推荐

  1. WinDBG中加载SOS和CLR

    WinDBG中加载SOS和CLR 最近产品环境出现了部分服务器当机情况,虽然重启之后问题就不出现了.但本着彻底解决问题的态度,想要找到root cause.多次尝试Visual Studio失败(可能 ...

  2. XML中的五个保留字符及实体引用

    字符名称 字符 实体引用 和 & & 大于号 >  > 小于号 <  < 单引号 ‘ &apos; 双引号 “ " 在XML文档中,构成元素内 ...

  3. Android开发过程中git、repo、adb、grep等指令的使用

    chown 是一条在Unix系统中用于设置文件所有者和文件关联组的命令. 需要超级用户的权限才能执行此命令.只有超级用户和属于组的文件所有者才能变更文件关联组.非特权用户(非超级用户)如需要设置关联组 ...

  4. 总结 React 组件的三种写法 及最佳实践 [涨经验]

    React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普 ...

  5. 版本问题 Java:Unsupported major.minor version 51.0 (unable to load class . . .

    导入别人的项目时报错  Java:Unsupported major.minor version 51.0 (unable to load class . . . 后发现错误是由于class编译器的J ...

  6. C语言之算数运算符

    一 什么是算数运算符 算术运算符: +:  就是把两个数据相加,得到和 -:  就是把两个数据相减,得到差 *:  就是把两个数据相乘,得到积 /:  就是把两个数据相除,得到商 %:  就是把两个数 ...

  7. Codevs 4189 字典

    4189 字典 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n ...

  8. Amazon才推众包物流,“京东众包”已红绿上阵,“达达”还手握10万配送大军

    据外媒消息,Amazon正在开发一款App,想让大家都来为他家送包裹. Amazon的设想是,在市区招募实体零售商,租用空间或者按包裹向其支付费用.这项服务在内部代号为“On My Way”,目前还在 ...

  9. Struts1和Struts2的区别和对比

    Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2  ...

  10. Git安装使用

    转载:http://www.open-open.com/lib/view/open1414396787325.html 1.window版地址 https://git-for-windows.gith ...