[英]ExecutorService and For loop JAVA
queuedJobs = dataController.getQueuedJobs();
threadExecutor = Executors.newFixedThreadPool(queuedJobs.size());
System.out.println("THE NUMEBR OF JOBS IS "+queuedJobs.size());
for (int i=0; i<queuedJobs.size(); i++){
System.out.println("THREAD "+i+" CREATED");
threadExecutor.execute( queuedJobs.get(i) );
}
我創建了一個queuedJobs.size(8個)線程池,但是for循環每次執行時僅執行7或6個更改的作業? 誰能向我解釋一下,並幫助我每次執行正確的金額?
我嘗試創建一個具有10個線程的簡單程序,但無法重現此問題,我的代碼段是:
package com.thread;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Executor {
public static void main(String[] args) {
List<Thread> queuedJobs = new ArrayList<Thread>();
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
queuedJobs.add(new Thread(new MyThreadClass()));
ExecutorService threadExecutor = Executors.newFixedThreadPool(queuedJobs.size());
System.out.println("THE NUMEBR OF JOBS IS "+queuedJobs.size());
for (int i=0; i<queuedJobs.size(); i++){
System.out.println("THREAD "+i+" CREATED");
threadExecutor.execute( queuedJobs.get(i) );
}
}
}
class MyThreadClass implements Runnable {
@Override
public void run() {
System.out.println("I am running");
}
}
輸出為:
THE NUMEBR OF JOBS IS 10
THREAD 0 CREATED
THREAD 1 CREATED
I am running
THREAD 2 CREATED
I am running
THREAD 3 CREATED
THREAD 4 CREATED
I am running
THREAD 5 CREATED
I am running
THREAD 6 CREATED
I am running
I am running
THREAD 7 CREATED
THREAD 8 CREATED
I am running
I am running
THREAD 9 CREATED
I am running
I am running
請張貼完整的代碼段以進行進一步調查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.