Java 并发编程之同步工具类信号量 Semaphore
Semaphore 可以理解为一个阈值,正在进行的操作数量不能超过此阈值,可以用来限制资源的访问,或者控制某个队列中对象的个数,也就是控制同时执行的线程的数量。
主要有acquire,release两个方法,第一个是获得锁,拿到锁之后线程继续往下执行,否则等待,release方法是释放锁,这样其他等待线程可以获得锁。
public class SemaphoreTest {private Semaphore semaphore = new Semaphore(2);public void m() {try {System.out.println(Thread.currentThread().getName()+" started");semaphore.acquire();Thread.sleep((int) (Math.random() * 2000));} catch (InterruptedException e) {e.printStackTrace();} finally {semaphore.release();}System.out.println(Thread.currentThread().getName()+" ended");}public static void main(String[] args) {SemaphoreTest test = new SemaphoreTest();for (int i=0;i<8; i++) {new Thread(()->test.m()).start();}}
}
Java 并发编程之同步工具类信号量 Semaphore相关推荐
- Java 并发编程之同步工具类闭锁 CountDownLatch
Java 同步工具类CountDownLatch相当于一个计数器,假设一个方法,等待一个计数器从初始值5变为0,每使用一次countdown()方法,计数器的值减少1,当计数器的值为0时,触发某件事. ...
- Java 并发编程之同步工具类 Exchanger
Exchanger 交换器,用于两个线程之间交换数据. 线程1调用exchange()方法,然后进行线程阻塞,等待线程2调用exchange()方法交换数据,线程2调用exchange()方法后,两个 ...
- Java 并发编程之同步工具类栅栏 CyclicBarrier
CyclicBarrier 用来阻塞一组线程,等待线程完成后才开始某件事情. 例如,开启5个线程,每个线程使用await方法开始阻塞,等待5个线程都完成,才开始执行await方法后面的代码. publ ...
- Java并发中常用同步工具类
为什么80%的码农都做不了架构师?>>> 同步工具类可以是任何一个对象,只要它根据其自身的状态来协调线程控制流.阻塞队列(BlockingQueue)可以作为同步工具类,其他类 ...
- Java高并发编程:同步工具类
内容摘要 这里主要介绍了java5中线程锁技术以外的其他同步工具,首先介绍Semaphore:一个计数信号量.用于控制同时访问资源的线程个数,CyclicBarrier同步辅助类:从字面意思看是路障, ...
- java并发编程学习juc工具类之Executors
文章目录 Executors 重要方法 1.newCachedThreadPool 2.newFixedThreadPool 3.newScheduledThreadPool 示例代码 4.newSi ...
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
2019独角兽企业重金招聘Python工程师标准>>> Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一 ...
- java并发基础(二)--- Java监视器模型、并发容器、同步工具类(闭锁、信号量)
原blog链接:http://www.cnblogs.com/peterxiao/p/6921903.html 总结一下第4.5章的东西. 一.java监视器模式 概念:把对象的所有可变状态都封装起来 ...
- Java并发编程:同步容器
为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...
最新文章
- 开源性能监控工具APM之Skywalking和Pinpoint的实测对比
- ffmpeg Windows Error 0xe06d7363
- java 倒计时_java倒计时器
- FPGA课程设计使用VHDL语言
- asp.net core 使用Mysql和Dapper
- PHP 如何判断当前用户已在别处登录
- python中seek(10、1)_Python中index()和seek()的用法(详解)
- 轻松解决U盘拷贝文件时提示文件过大问题
- xsos:一个在Linux上阅读SOSReport的工具
- 计算机包括台式机和笔记本,笔记本电脑与台式机怎样连接
- threejs学习05-OimoPhysics模型的物理特性
- 流利阅读 2019 1.6 What happened at Theranos is a dazzling story of deception
- 逃避追债?贾跃亭把法拉第未来股权转给了外甥,但他还有5套豪宅! | 焦点
- 网易AI出席2018世界人工智能大会,带来沉浸式交互体验
- Python添加下拉菜单
- 通过meta代码强制浏览器使用WebKit内核极速模式
- 【转载】SpringBoot 接口数据加解密技巧,so easy!
- 数据库mysql---NUMERIC数据类型
- java对文件进行压缩的两种方法
- 霍尔电流传感器在直流列头柜的应用
热门文章
- 【英语学习】【医学】Unit 01 The Skeletal System
- 自定义控件之绘图篇(一):概述及基本几何图形绘制
- C开源hash代码uthash的用法总结(1)
- OpenSSL的Heartbleed漏洞原理及简单模拟
- 固件是通用的吗_如何升级AirPods固件?
- 大华的支持rtmp推流吗_海康大华DSS视频拉流-RTSP转RTMP多媒体播放技术
- xp系统mysql安装教程视频教程_Windows XP操作系统下的MYSQL安装过程_PHP教程
- 简单易懂设计模式——简单工厂模式
- C# Monitor实现
- 黄聪:Discuz自制模板带jquery时与discuz本身冲突解决办法