Java-----Semaphore信号量
来源:互联网 发布:java map.foreach用法 编辑:程序博客网 时间:2024/05/21 21:41
一.Semaphore介绍
Semaphore:字面意思是信号量,主要用来控制同时访问某个特定资源的操作数量或者某个操作的数量。
二.Semaphore常用操作函数
(1).构造函数:
public Semaphore(int permits) public Semaphore(int permits, boolean fair)第一个构造函数:permits指定允许许可的初始数量。第二个构造函数:fair=true,表示公平策略,当使用资源的时候采用先来先用;fair=false,表示不公平策略,当使用资源的时候采用完全随机。
(2).获取许可函数:
public void acquire() throws InterruptedException public void acquire(int permits) throws InterruptedExceptionacquire函数主要用来申请资源。
(3).释放许可函数:
public void release()public void release(int permits)release函数主要用来释放许可资源。
三.举例
有三个线程ThreadA,ThreadB,ThreadC并行运行,线程ThreadA用来初始化变量num,当初始化完成的时候,线程ThreadB和ThreadC再获取初始化后的变量num。如何实现?
public class SemaphoreTest {/** * 定义一个信号量,该类内部维持了多个线程锁,可以阻塞多个线程,释放多个线程,线程的阻塞和释放是通过permit概念来实现的 * 线程通过semaphore.acquire()方法获取permit,如果当前semaphore 有permit 则分配给该线程, * 如果没有则阻塞该线程直到semaphore调用release()方法释放permit构造函数中参数:permit(允许) 个数. **/private static Semaphore semaphore=new Semaphore(0);private static int num;public static void main(String[] args) {Thread threadA = new Thread(){@Overridepublic void run() {try {Thread.sleep(3000);num = 1;semaphore.release(2);//释放2个资源} catch (InterruptedException e) {e.printStackTrace();}}};Thread threadB = new Thread(){@Overridepublic void run() {try {semaphore.acquire();//申请资源} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"获取到num 的值为:"+num);}};Thread threadC = new Thread(){@Overridepublic void run() {try {semaphore.acquire();//申请资源} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"获取到num 的值为:"+num);}};//开启线程threadA.start();threadB.start();threadC.start();}}
阅读全文
0 0
- java信号量Semaphore
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java信号量Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java信号量Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java中信号量 Semaphore
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java中信号量 Semaphore
- Java 信号量 Semaphore 介绍
- JAVA并发信号量 Semaphore
- Java Semaphore 信号量
- VBA自定义函数-选择文件对话框
- Word2vec之情感语义分析实战(part1)
- redis Desktop Manager 从redis管理工具看redis数据结构
- 超实用总结:AI实践者需要用到的10个深度学习方法
- 面向 Java 开发人员的区块链链代码
- Java-----Semaphore信号量
- android版集成双解码器的视频播放器
- 基于深度学习的自动上色程序,以及其实际应用
- 系统架构师——搭建SpringMVC,Spring,Mybatis框架——从模块开发到系统架构搭建
- HTML5中点击那个图片显示那个图片
- 单层感知器
- 继承中的原则
- HTML5
- servlet基础