Semaphore 实现 互斥
来源:互联网 发布:企业数据库管理系统 编辑:程序博客网 时间:2024/05/21 09:15
介绍:Semaphore中管理着一组虚拟的许可,许可的初始数量可通过构造函数来指定【new Semaphore(1);】,执行操作时可以首先获得许可【semaphore.acquire();】,并在使用后释放许可【semaphore.release();】。如果没有许可,那么acquire方法将会一直阻塞直到有许可(或者直到被终端或者操作超时)。
- package com.zhy.concurrency.semaphore;
- import java.util.concurrent.Semaphore;
- /**
- * 使用信号量机制,实现互斥访问打印机
- *
- * @author zhy
- *
- */
- public class MutexPrint
- {
- /**
- * 定义初始值为1的信号量
- */
- private final Semaphore semaphore = new Semaphore(1);
- /**
- * 模拟打印操作
- * @param str
- * @throws InterruptedException
- */
- public void print(String str) throws InterruptedException
- {
- //请求许可
- semaphore.acquire();
- System.out.println(Thread.currentThread().getName()+" enter ...");
- Thread.sleep(1000);
- System.out.println(Thread.currentThread().getName() + "正在打印 ..." + str);
- System.out.println(Thread.currentThread().getName()+" out ...");
- //释放许可
- semaphore.release();
- }
- public static void main(String[] args)
- {
- final MutexPrint print = new MutexPrint();
- /**
- * 开启10个线程,抢占打印机
- */
- for (int i = 0; i < 10; i++)
- {
- new Thread()
- {
- public void run()
- {
- try
- {
- print.print("helloworld");
- } catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- };
- }.start();
- }
- }
- }
- Thread-1 enter ...
- Thread-1正在打印 ...helloworld
- Thread-1 out ...
- Thread-2 enter ...
- Thread-2正在打印 ...helloworld
- Thread-2 out ...
- Thread-0 enter ...
- Thread-0正在打印 ...helloworld
- Thread-0 out ...
- Thread-3 enter ...
- Thread-3正在打印 ...helloworld
- Thread-3 out ...
0 0
- Semaphore 实现 互斥
- Java 并发专题 : Semaphore 实现 互斥 与 连接池
- Java 并发专题 : Semaphore 实现 互斥 与 连接池
- Java 并发专题 : Semaphore 实现 互斥 与 连接池
- Java 并发专题 : Semaphore 实现 互斥 与 连接池
- java线程之间的控制,使用Semaphore 实现 互斥
- Java 并发专题 : Semaphore 实现 互斥 与 连接池
- Java 并发专题 : Semaphore 实现 互斥 与 连接池
- 浅析信号量(Semaphore)和互斥(Mutex)
- 浅析信号量(Semaphore)和互斥(Mutex)
- muetx semaphore 互斥与同步
- java中的多线程包--Semaphore 实现 互斥 与 连接池
- Semaphore和Mutex -- Linux下的互斥机制分析
- 互斥(mutext)和信号量(semaphore)的区别
- 线程同步互斥之信号量对象(Semaphore)
- Mutex与Semaphore 第三部分:互斥的问题
- semaphore 实现
- 为AJAX实现互斥
- GObject入门教程
- ubuntu安装oracle-jdk,切换jdk版本
- Parcelabel序列化详细使用
- BCS和ECCS等合并系统简单对比
- poj3264 线段树维护最大值最小值
- Semaphore 实现 互斥
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- Android实现左右滑动指引效果
- Linux内核Socket参数调优
- 403错误
- tomcat搭建服务器
- 黑马程序员-设计模式
- GdiplusFlat(5)画图片
- 中文乱码解决的4种方式