Я пытаюсь присвоить номер каждому из MyRunnable
, отправленному ThreadPoolExecutor
, но мне это не удалось.
Мой фрагмент кода:
import java.util.concurrent.*;
class SimpleThreadFactory implements ThreadFactory {
String name;
static int threadNo = 0;
public SimpleThreadFactory (String name){
this.name = name;
}
public Thread newThread(Runnable r) {
++threadNo;
System.out.println("thread no:"+threadNo);
return new Thread(r,name+":"+threadNo );
}
public static void main(String args[]){
SimpleThreadFactory factory = new SimpleThreadFactory("Ravindra");
ThreadPoolExecutor executor = new ThreadPoolExecutor(1,5,10,TimeUnit.SECONDS,new ArrayBlockingQueue(100),factory);
for ( int i=0; i < 10; i++){
executor.submit(new MyRunnable());
}
executor.shutdown();
}
}
class MyRunnable implements Runnable {
public void run(){
System.out.println("Runnable:"+Thread.currentThread().getName());
}
}
Мои ожидания:
executor.submit(new MyRunnable());
должен вызывать newThread в ThreadFactory для каждой отправки на исполнителя. Но на самом деле это произошло только один раз.
Выход:
thread no:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Runnable:Ravindra:1
Почему submit() не создает новый поток для каждой отправленной задачи Runnable?
Как я могу назначить порядковый номер каждому MyRunnable, отправленному исполнителю?
заранее спасибо