package com.cn.pkg;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class SemapDemo implements Runnable {
final Semaphore semp = new Semaphore(5);
@Override
public void run() {
try {
semp.acquire();
Thread.sleep(1000);
System.out.println(Thread.currentThread().getId()+"done");
semp.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ExecutorService exec = Executors.newFixedThreadPool(20);
final SemapDemo demo = new SemapDemo();
for (int i = 0; i < 40; i++) {
exec.submit(demo);
}
}
}
产生的结果
for (int i = 0; i < 40; i++) //开了40线程循环
final Semaphore semp = new Semaphore(5);//每次只开5个线程,
9是随机的
并不是,我做了测试,循环只是添加任务,线程池只有20个线程,信号量是5只是说他最多有5个线程同时访问,不管线程池有多少线程,id都是从9开始的