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. js定义类或对象

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Ruby的对象模型

    目录 备注对象模型无图无真相基本规则代码示例如何修改Singleton Class?如何修改类型,如Child?类型方法是特殊的实例方法,这些方法定义在类型的Singleton Class中.备注 备 ...

  3. markdown实现

    博客园文章markdown实现   博客园也可以使用markdown写博客了~_~ 实现方法 在博客园管理-设置-页首Html代码中加入: <!-- Markdown --> <sc ...

  4. jQuery判断元素是否显示与隐藏

    jQuery判断一个元素是显示还是隐藏,jQuery使用is()方法来判断一个元素是否显示,反之则为隐藏 核心代码 if($("#username").is(":hidd ...

  5. Go语言Web框架gwk介绍 3

    Go语言Web框架gwk介绍 (三)   上一篇忘了ChanResult ChanResult 可以用来模拟BigPipe,定义如下 type ChanResult struct { Wait syn ...

  6. Netty轻量级对象池实现分析

    什么是对象池技术?对象池应用在哪些地方? 对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象,类似线程池的概念.对象池缓存了一些已经创建好的对象,避免需要时才创建对象,同时限制了实例的个数.池 ...

  7. 前端工具 - 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  8. 使用idea Live Template实现eclipse syso自动提示代码功能

    转载:http://blog.sina.com.cn/s/blog_4c4195e70102wh7e.html 具体步骤: 1.点击File-->Setting-->Live Templa ...

  9. Linux CentOS 7 YUM 安裝 MySQL 5.7

    MySQL YUM 源:http://dev.mysql.com/downloads/repo/yum/ # 下載源 $ wget http://dev.mysql.com/get/mysql57-c ...

  10. [Q]AdobePDF打印机“仅依靠系统字体”问题

    使用Adobe打印机打印时提示: 解决方法: 不勾选“仅依靠系统字体”选项,并确认.