Я использую ExecutorService
ExecutorService executor = Executors.newFixedThreadPool(20000);
И у меня в классе ThreadSystem.java
два статических члена:
public static Integer count = 0;
public static Integer rejectedCount = 0;
тогда я добавляю темы к нему:
for (i = 0; i < 20001; i++) {
Runnable worker = new MyThread();
try {
executor.execute(worker);
} catch (RejectedExecutionException ex) {
rejectedCount++;
}
}
executor.shutdown();
while (!executor.isTerminated()) {
}
Внутри темы:
@Override
public void run() {
ThreadSystem.count++;
try{
Thread.sleep(50);
}
catch(InterruptedException ex){
Logger.getLogger(MyThread.class.getName()).log(Level.SEVERE, ex.getMessage(),ex);
}
}
Полученные результаты показывают, что существуют потоки, которые не выполняются, а переменная count
не равна количеству созданных потоков, хотя rejectedCount
, который ссылается на отклоненные потоки, равен 0:
количество: 19488
отклонено: 0
Так что еще может убедить меня в том, что все потоки будут работать, и в чем причина этого случая: число (выполняемые потоки) не равно добавленным потокам ?