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.youkuaiyun.com/caicongyang
记录与分享,你我共成长 -from
caicongyang