package com.souyidai.controllers;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class SemaphoreTest {
private static final int THREAD_COUNT = 30;
private static ExecutorService threadPool = Executors.newFixedThreadPool(THREAD_COUNT);
private static Semaphore s = new Semaphore(10);
public static void main(String[] args) {
for (int i = 0; i < THREAD_COUNT; i++) {
final String test = String.valueOf(i);
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
s.acquire();
Thread.currentThread().sleep(2000);
System.out.println("save data:"+test+":::"+Thread.currentThread().getName());
s.release();
} catch (Exception e) {
}
}
});
}
threadPool.shutdown();
}
}
执行结果:
save data:8:::pool-1-thread-9
save data:5:::pool-1-thread-6
save data:6:::pool-1-thread-7
save data:0:::pool-1-thread-1
save data:9:::pool-1-thread-10
save data:7:::pool-1-thread-8
save data:4:::pool-1-thread-5
save data:2:::pool-1-thread-3
save data:1:::pool-1-thread-2
save data:3:::pool-1-thread-4
save data:10:::pool-1-thread-11
save data:11:::pool-1-thread-12
save data:13:::pool-1-thread-14
save data:15:::pool-1-thread-16
save data:17:::pool-1-thread-18
save data:19:::pool-1-thread-20
save data:12:::pool-1-thread-13
save data:18:::pool-1-thread-19
save data:16:::pool-1-thread-17
save data:14:::pool-1-thread-15
save data:20:::pool-1-thread-21
save data:21:::pool-1-thread-22
save data:23:::pool-1-thread-24
save data:26:::pool-1-thread-27
save data:27:::pool-1-thread-28
save data:22:::pool-1-thread-23
save data:29:::pool-1-thread-30
save data:28:::pool-1-thread-29
save data:25:::pool-1-thread-26
save data:24:::pool-1-thread-25
Process finished with exit code 0