public class SemaphoreTest {
//信号量,只允许 3个线程同时访问
private static Semaphore semaphore = new Semaphore(3);
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
final int num = i;
executorService.submit(new Runnable() {
@Override
public void run() {
showLog(num);
}
});
}
executorService.shutdown();
}
private static void showLog(int num) {
//获取许可
try {
semaphore.acquire();
//执行
System.out.println("Accessing: " + num);
Thread.sleep(2000); //休眠2秒
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
//释放
semaphore.release();
System.out.println("Release..." + num);
}
}
}