2019独角兽企业重金招聘Python工程师标准>>>

停车场的停车位数量是固定的,Semaphore就像是停车场的管理员控制总的停车数量,如果车位已满,只能出一辆进一辆

Semaphore semaphore=new Semaphore(2);

控制车位数是2,默认不是公平的

Semaphore semaphore=new Semaphore(2,true);

车位数是2,公平锁,先到先停车

package com.vincent.juc;import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;/*** Vincent 创建于 2016/6/1.*  信号灯*/
public class SemaphoreDemo {public static void main(String[] args) {final Semaphore semaphore=new Semaphore(2,true);ExecutorService threadPool = Executors.newCachedThreadPool();final Random random=new Random();for(int i=0;i<10;i++){threadPool.execute(new Runnable() {@Overridepublic void run() {long id = Thread.currentThread().getId();try {semaphore.acquire();System.out.println(id+"获取到锁");int t = random.nextInt(5);TimeUnit.SECONDS.sleep(t+1);} catch (InterruptedException e) {e.printStackTrace();}finally {System.out.println(id+"释放锁");semaphore.release();}}});}}
}

输出:

12获取到锁
13获取到锁
12释放锁
14获取到锁
13释放锁
17获取到锁
17释放锁
15获取到锁
14释放锁
18获取到锁
15释放锁
16获取到锁
18释放锁
19获取到锁
19释放锁
20获取到锁
16释放锁
21获取到锁
21释放锁
20释放锁

转载于:https://my.oschina.net/vincentzhao/blog/685665

Semaphore示例相关推荐

  1. 并发编程-17AQS同步组件之 Semaphore 控制并发线程数的信号量

    文章目录 J.U.C脑图 Semaphore 概述 Semaphore 构造函数及方法 构造函数 常用和需要注意的方法 Semaphore 示例 acquire() semaphore.acquire ...

  2. 关于信号量Semaphore的acquire与release的说明

    1.Semaphore信号量作为一种流控手段,可以对特定资源的允许同时访问的操作数量进行控制,例如池化技术(连接池)中的并发数,有界阻塞容器的容量等. 2.Semaphore中包含初始化时固定个数的许 ...

  3. Python-----多线程threading用法

    threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要,先说一下线程和进程的各种区别,如图 概括起来就是 IO密集型(不用CPU) 多线程计算密集型(用CPU) 多 ...

  4. 多线程面试题_100多线程和Java并发面试问答–最终清单(PDF下载)

    多线程面试题 在这篇文章中,我们将提供有关多线程和Java并发面试问答的综合文章. 编者注:并发始终是开发人员的挑战,编写并发程序可能非常困难. 引入并发时,有很多事情可能会崩溃,并且系统的复杂性会大 ...

  5. Java并发编程—线程同步类

    原文作者:洲洋1984 原文地址:Java 并发包中的高级同步工具 Java 中的并发包指的是 java.util.concurrent(简称 JUC)包和其子包下的类和接口,它为 Java 的并发提 ...

  6. 常见的锁策略、synchronized中的锁优化机制

    一.常见的锁策略 锁策略,和普通程序猿基本没啥关系,和 "实现锁" 的人才有关系的 这里所提到的锁策略,和 Java 本身没关系,适用于所有和 "锁" 相关的情 ...

  7. java并发:线程同步机制之计数器Exechanger

    第一节 CountDownLatch (1)初识CountDownLatch (2)详述CountDownLatch CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量. ...

  8. 《Java并发编程的艺术》读书笔记 - 第八章 - Java中的并发工具类

    目录 前言 等待多线程完成的 CountDownLatch 示例 同步屏障 CyclicBarrier 示例 CyclicBarrier 和 CountDownLatch 的区别 控制并发线程数量的 ...

  9. Java JUC高并发编程(三)-CallableJUC辅助类

    目录 一.Callable接口 二.JUC辅助类 1.减少计数CountDownLatch 2.循环栅栏CyclicBarrier 3.信号灯Semaphore 一.Callable接口 Callab ...

最新文章

  1. TensorFlowSharp入门使用C#编写TensorFlow人工智能应用
  2. 使用JQuery完成仿百度的信息提示
  3. composer报错:received xxx bytes out of the 以及composer手动引入扩展包
  4. 10个强大的Javascript表单验证插件推荐
  5. jpa避免n+1_JPA技巧:避免N + 1选择问题
  6. 【C++深度剖析教程3】C++中类的静态成员变量
  7. java执行查询postgresql得到中文乱码_Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(上篇)...
  8. python的底层实现_Python底层封装实现方法详解
  9. 多通道卷积的参数数量计算
  10. 如何安装和使用Android夜神模拟器
  11. php mkdir创建多级目录
  12. 最新30套Java项目实战
  13. 数据结构1800题-错题集-第七章
  14. DEDECMS验证码不正确及其不显示问题
  15. 计算机英语第二版期末翻译试题答案,开放英语I期末翻译测试题
  16. 熔断机制什么意思_什么是熔断机制,熔断机制是什么意思
  17. 尚硅谷外卖项目笔记二
  18. 〖大学生·技术人必学的职业规划白宝书 - 职业规划篇①〗- 大学生选择职业前的自我认知与剖析
  19. linux单进程最大内存,限制单个Linux进程的内存使用量
  20. osr和Pyproj库的简单使用

热门文章

  1. swift学习笔记《5》- 实用
  2. Python中被双下划线包围的魔法方法
  3. springboot学习笔记-5 springboot整合shiro
  4. spring session spring:session:sessions:expires 源码跟踪
  5. Android第三十二期 - 辅助类Android
  6. IDC:2017年医疗行业IT花费将达336.5亿
  7. 贪心 赛码 1001 Movie
  8. 日本新年传统习俗介绍(一)
  9. OpenCV读取多幅图片,读取系列图片,读取文件夹中指定图像类型的系列图片
  10. c++语言取整为什么要加0.5_C/C++之取整函数