Semaphore_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Semaphore

Semaphore

 2014/8/16 18:19:41  臻是二哥  程序员俱乐部  我要评论(0)
  • 摘要:java中的semaphore和OP中是一样的,首先定义信号量的大小,对于那些需要申请有限资源的线程,先通过semaphore.acquire()来获得信号量,使用完毕在semaphore.release()来释放信号量即可,因此信号量需要传入给实现了Runnable的类。importjava.util.Collections;importjava.util.HashSet;importjava.util.Set;importjava.util.Random;importjava.util
  • 标签:Map SEM
java中的semaphore和OP中是一样的,首先定义信号量的大小,对于那些需要申请有限资源的线程,先通过semaphore.acquire()来获得信号量,使用完毕在semaphore.release()来释放信号量即可,因此信号量需要传入给实现了Runnable的类。
class="java">import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class TestSemaphore {
	public static void main(String [] args)
	{
		ExecutorService es=Executors.newCachedThreadPool();

		Semaphore se=new Semaphore(2,true);
		for(int i=0;i<5;i++)
		{
			es.execute(new Thread(new Person(se)));
		}
		es.shutdown();
	}
	
}
class Person implements Runnable
{
	private Semaphore sema=null;
	public Person(Semaphore sema)
	{
		this.sema=sema;
	}
	public void run()
	{
		try
		{
			String name=Thread.currentThread().getName();
			System.out.println(name+"等待进入电话亭");
			sema.acquire();
			System.out.println(name+"进入电话亭,打电话中。。。");
			Thread.sleep(new Random().nextInt(5000));			
			System.out.println(name+"出电话亭");
			sema.release();	
		}
		catch (Exception e)
		{
		}
	}

}
发表评论
用户名: 匿名