---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
Semaphore:计数信号量.
可用于控制同步访问资源的线程个数。
他的构造方法可选地接受一个公平 参数。如果需要此信号量保证在争用时按先进先出的顺序授予许可,那么就传递true
信号许可数为1的单个信号量可以实现互斥锁功能,但它有一个特点:就是这个锁可以由其他线程来调用release()方法释放,这一特点可用于一些死锁恢复。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class SemaphoreDemo {
public static void main(String[] args) {
final Semaphore sem = new Semaphore(50);
ExecutorService es = Executors.newFixedThreadPool(10);
//起10个线程
for (int i=0; i<10; i++) {
es.execute(new Runnable() {
public void run() {
try {
sem.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"进入了");
System.out.println((4-sem.availablePermits())+"个并发中,还有"+sem.availablePermits()+"个位置");
System.out.println(Thread.currentThread().getName()+"走了");
sem.release();
System.out.println((4-sem.availablePermits())+"个并发中,还有"+sem.availablePermits()+"个位置");
}
});
}
es.shutdown();
// sem.release(); //外部线程的释放
}
}
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net