semaphore信号灯

原创 2012年03月25日 16:22:29
//Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。
//使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。
//Semaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?
//同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中在等待的另外5个人中又有一个可以占用了。
//另外等待的5个人中可以是随机获得优先机会,也可以是按照先来后到的顺序获得机会,
//这取决于构造Semaphore对象时传入的参数选项。
//单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,
//再由另一个线程释放“锁”,这可应用于死锁恢复的一些场合
//注意,调用 acquire() 时无法保持同步锁,因为这会阻止将项返回到池中。
//信号量封装所需的同步,以限制对池的访问,这同维持该池本身一致性所需的同步是分开的。 
// semaphore本身在jdk的例子也很好,可以去看看
public class SemaphoreTest {
	public static void main(String[] args) {
		ExecutorService service = Executors.newCachedThreadPool();
		final  Semaphore sp = new Semaphore(3);
		for(int i=0;i<10;i++){
			Runnable runnable = new Runnable(){
					public void run(){
					try {
						sp.acquire();
					} catch (InterruptedException e1) {
						e1.printStackTrace();
					}
					System.out.println("线程" + Thread.currentThread().getName() + 
							"进入,当前已有" + (3-sp.availablePermits()) + "个并发");
					try {
						Thread.sleep((long)(Math.random()*10000));
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("线程" + Thread.currentThread().getName() + 
							"即将离开");					
					sp.release();
					//下面代码有时候执行不准确,因为其没有和上面的代码合成原子单元
					System.out.println("线程" + Thread.currentThread().getName() + 
							"已离开,当前已有" + (3-sp.availablePermits()) + "个并发");					
				}
			};
			service.execute(runnable);			
		}
	}

}

Linux 进程间通信 - 信号灯(Semaphores)

一般意义下,信号灯是一个具有整数值的对象,它支持两种操作P()和V()。P()操作减少信号灯的值,如果新的信号灯的值小于0,则操作阻塞;V()操作增加信号灯的值,如果结果值大于或等于0,则唤醒一个等待...
  • fivedoumi
  • fivedoumi
  • 2014年06月10日 15:14
  • 1762

Semaphore实现信号灯

信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。 Semaphore 可以很轻松完成信号量控制,Sema...
  • Erica_1230
  • Erica_1230
  • 2015年01月17日 19:37
  • 323

JAVA Semaphore实现信号灯

lSemaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 ØSemaphore实现的功能就类似...
  • dacainiao007
  • dacainiao007
  • 2013年07月02日 14:34
  • 730

Semaphore实现信号灯

lSemaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 ØSemaphore实现的功能就类似...
  • kwgjbj
  • kwgjbj
  • 2014年06月20日 20:43
  • 500

Java—Semaphore实现信号灯

Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 Semaphore实现的功能就类似厕所...
  • weiguishan
  • weiguishan
  • 2015年03月01日 16:46
  • 550

Java高级之信号灯Semaphore

1、Semaphore概念 Semaphore是Java1.5之后提供的一种同步工具,Semaphore可以维护访问自身线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数...
  • u011613354
  • u011613354
  • 2016年04月14日 11:33
  • 813

semaphore实现信号灯

Semaphore java多线程
  • qq_33248299
  • qq_33248299
  • 2017年12月18日 01:10
  • 39

Semaphore信号灯:一个计数信号量

信号灯入门demo package xiaozhijingtian; import java.util.concurrent.ExecutorService; import java.util.co...
  • jingtianxiaozhi01
  • jingtianxiaozhi01
  • 2013年11月17日 22:56
  • 824

线程并发工具--Semaphore(信号灯)

Semaphore可以运行指定个数的线程同时运行某段代码,而不是一般同步情况下的一个线程。下面的程序中,10个线程运行的时候,都必须先获得到Semaphore,运行完毕之后归还Semaphore,达到...
  • huqiao1220
  • huqiao1220
  • 2014年10月18日 11:28
  • 455

JAVA多线程—Semaphore实现信号灯

Semaphore实现信号灯 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 Sema...
  • u012758088
  • u012758088
  • 2017年04月21日 10:55
  • 130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:semaphore信号灯
举报原因:
原因补充:

(最多只允许输入30个字)