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