2014-02-14 3 views
0
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 заданий, меняющихся каждый раз, когда я запускаю его? Может ли кто-нибудь объяснить это мне и помочь мне выполнить правильную сумму каждый раз?ExecutorService and For loop JAVA

+0

Что такое 'queuedJobs'? – PeterMmm

+0

Arraylist объектов Job. Задание просто вызывает сон (1000) в run() и печатает заявление, в котором говорится, что он сейчас бодрствует. – user1950999

+0

Сколько раз «THREAD:» + i + «CREATED» печатается? – Sanjeev

ответ

0

Я попытался создать простую программу с 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 

Пожалуйста, пост полный ваш фрагмент кода, чтобы исследовать в дальнейшем.