这两个都可以控制并发数
信号量Semaphore
控制并发数,线程由自己创建,线程不复用。
个人理解:班级有20个人要去买票,只有两个窗口,大家一起去买,所以每次都是不同的人在窗口买。
public static void test() {
Semaphore semaphore = new Semaphore(2);
for (int i = 0; i < 5; i++) {
Thread thread = new Thread() {
public void run() {
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName() + " start running");
Thread.sleep(3000);
System.out.println(Thread.currentThread().getName() + " stop running");
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
}
newFixedThreadPool
也可以控制并发数,线程由线程池