importjava.util.LinkedList;importjava.util.Queue;importjava.util.concurrent.Semaphore;public classTestSemaphore {/*** 测试主程序*/
public static voidmain(String[] args) {
TestSemaphore t= newTestSemaphore();
t.runTest();
}//TestSemaphore
/**信号量*/
private Semaphore mSem = new Semaphore(0);/**产生的产品队列*/
private Queue mQueue = new LinkedList();/*** 进行测试*/
public voidrunTest() {
Runnable runProvider= newRunnable() {
@Overridepublic voidrun() {
provider();
}
};
Runnable runCustomer= newRunnable() {
@Overridepublic voidrun() {
customer();
}
};newThread(runCustomer).start();newThread(runProvider).start();while(true) {try{
Thread.sleep(300);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}/*** 生产者线程*/
public voidprovider() {for(int i = 0; i < 10; i++) {//生成一个产品,放到队列里
String p = String.format("product_%d", i);
mQueue.offer(p);
System.out.println(String.format("Send sig >>>>>>>>>>>>> %s", p));//发出信号量
mSem.release();try{
Thread.sleep(300);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}/*** 消费者线程*/
public voidcustomer() {while(true) {//等待信号量
try{
mSem.acquire();
}catch(InterruptedException e) {
e.printStackTrace();
}//从队列里取出一个产品
String s =mQueue.poll();
System.out.println(String.format("Get sig : %s", s));try{
Thread.sleep(500);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}