Java多线程之信号量Semaphore

SemaphoreDemo.java from caicongyang

package com.ccy.thread.demo;

import java.util.concurrent.Semaphore;

import org.junit.Test;

/**
 * 
 * <p> 
 * Title: SemaphoreDemo.java 
 * Package com.ccy.thread.demo 
 * </p>
 * <p>
 * Description: Java多线程之信号量Semaphore
 * <p>
 * @author Tom.Cai
 * @created 2015-12-27 下午1:40:07 
 * @version V1.0 
 *
 */
public class SemaphoreDemo {

	@Test
	public void test(){
		Resource3 res = new Resource3();
		new Thread(new worker(res)).start();
		new Thread(new worker(res)).start();
		new Thread(new worker(res)).start();
	}

}

class Resource3 {
	private Semaphore semaphore = new Semaphore(1);// 信号量
	private int count =10;
	
	public void move(){
		while(count >1){
			try {
				// 从此信号量获取一个许可,在提供一个许可前一直将线程阻塞
				semaphore.acquire();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			count = count -1;
			System.out.println(count);
			//释放这个信号量
			semaphore.release();
			System.out.println(Thread.currentThread().getName() +"move ing");
		}
	}
	
}

class  worker implements Runnable{
	private Resource3 res;
	
	public worker(Resource3 res){
		this.res  = res;
	}
	
	@Override
	public void run() {
		res.move();
	}
	
}



后记:

好吧,例子好像不是很恰当!

更多多线程精彩内容请继续关注我的博客http://blog.csdn.net/caicongyang

记录与分享,你我共成长 -from caicongyang

猜你喜欢

转载自xianlincai.iteye.com/blog/2367931