原文地址:
http://www.java2000.net/p11622上次使用了自己设计的结构,实现了一个方法,只能被2个线程同时使用
经网友提醒,发现用信号量才是正途,我这里只给出测试代码和运行效果,其它的大家自己看吧
- package concurrent;
- import java.util.concurrent.Semaphore;
- public class SemaphoreTest extends Thread {
- public static void main(String[] args) {
- for (int i = 0; i <= 10; i++) {
- new SemaphoreTest().start();
- }
- }
- public void run() {
- int i = 2;
- OnlyTwo ot = new OnlyTwo();
- while (i-- > 0) {
- System.out.printf("[%3d]%d=%d\n",this.getId(),System.currentTimeMillis(),+ot.getSomthing());
- try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- ot.returnSomthing();
- }
- }
- }
- class OnlyTwo {
- private static final int MAX_AVAILABLE = 3;
- private static final Semaphore available = new Semaphore(MAX_AVAILABLE, false);
- private static int NUM = 1;
-
- public int getSomthing() {
- try {
- available.acquire();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return NUM++;
- }
-
- public void returnSomthing() {
- available.release();
- }
- }
运行效果
[ 9]1225837305234=1
[ 10]1225837305250=3
[ 8]1225837305250=2
[ 8]1225837305468=4
[ 10]1225837305468=6
[ 9]1225837305468=5
[ 12]1225837305250=7
[ 14]1225837305250=8
[ 16]1225837305250=9
[ 16]1225837305875=10
[ 12]1225837305875=12
[ 14]1225837305875=11
[ 18]1225837305250=13
[ 13]1225837305250=15
[ 11]1225837305250=14
[ 18]1225837306281=16
[ 13]1225837306281=18
[ 11]1225837306281=17
[ 15]1225837305250=19
[ 17]1225837305250=20
[ 17]1225837306687=21
[ 15]1225837306687=22
分享到:
相关推荐
使用信号量(Semaphore)实现线程的同步
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
这篇文章主要介绍了python线程信号量semaphore使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.semaphore信号量原理 多线程同时运行,能提高程序的...
主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
难堪的一次面试: 信号量Semaphore了解过吗?没有
关于Android变成中的信号量semaphore,在使用过程中我们往往搞不清楚其信号量的申请和使用。这里主要针对信号量初始值为零的情况做介绍,其他情况不做讨论。初始值为零的情况较少使用,部分代码中的这个情况往往让...
基于 Java 的并发信号量的计数信号量。 安装 通过 npm 安装模块: npm install async-semaphore 快速示例 // fairness false var Semaphore = require ( 'async-semaphore' ) ; var semaphore = new Semaphore ( ...
信号量(Semaphore)哲学家进餐问题(the dining philosophers problem)---------------------------程序
Semaphore的使用及其方法的使用。
Semaphore Semaphore分为单值和多值两种,前者只能被一个线程获得,...单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场
资源包含了vxworks多任务(task和semaphore信号量及事件)的相关编程例子,通过创建多任务的简单例子,帮助大家了解taskSpawn函数、信号量semaphore、以及事件event的使用方法。
信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥访问 (临界资源指同一时刻只能有有限个访问),常用于协助一组相互竞争的任务来访问临界资源。运行机制可以理解为:信号量是...
Java并发编程(23)并发新特性—信号量Semaphore(含代码)编程开发技术共3页.pdf.zip
JAVA多线程--信号量(Semaphore)_.docx
信号量在go语言上实现几种信号量模式。例子基本信号量BasicSemaphore是一个管理固定数量的并发任务的信号灯。 func TestSemaphore ( t * testing. T ) { permit := 3 sem := semaphore . NewSemaphore ( permit ) ...
介绍临界资源的访问机制,有Semaphore,signal,mutex等
主要介绍了Java并发编程Semaphore计数信号量详解,具有一定参考价值,需要的朋友可以了解下。
semaphore完整搭建方案,包括帮助文档、程序源码、可执行程序。按照帮助文档完整搭建可视化ansible部署解决方案
信号量+共享存储区的进程间通信,互斥、同步