/**
*
* @author beiyaoyao
*/
public class SemaphoreDemo implements Runnable {
//设置有几个线程可以进入执行的代码段
final Semaphore semaphore = new Semaphore(5);
@Override
public void run() {
try {
semaphore.acquire();
Thread.sleep(5000);
System.out.println(Thread.currentThread().getId() + "exec");
//释放信号量,如果不释放导致内存泄漏,那么进入该临界区的线程资源就越来越少
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//newFixedThreadPool(10)用工厂生产一个容纳10个线程的线程池
ExecutorService exec = Executors.newFixedThreadPool(10);
final SemaphoreDemo demo = new SemaphoreDemo();
for(int i = 0 ; i < 10 ; i ++){
exec.submit(demo);
}
exec.shutdown();
}
}
执行完该程序后,首先休眠5秒,结束后会输出5个线程的ID,再休眠5秒,继续输出5个线程的id。输出的线程id,以5个一组为单位。