![](/img/trans.png)
[英]Java Producer Consumer - Why not a simple FixedThreadPool?
[英]Why FixedThreadPool not working properly
这是我的以下代码:
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("Start"+" "+Thread.currentThread().getName());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("End!"+" "+Thread.currentThread().getName());
}
}
});
executor.shutdown();
executor.awaitTermination(1, TimeUnit.SECONDS);
这是我的输出:
Start pool-1-thread-1
End! pool-1-thread-1
Start pool-1-thread-1
End! pool-1-thread-1
Start pool-1-thread-1
End! pool-1-thread-1
Start pool-1-thread-1
End! pool-1-thread-1
Start pool-1-thread-1
End! pool-1-thread-1
我的理解是,在我的代码中, FixedThreadPool
有5
线程。 因此,当我运行代码时,应该输出所有5
线程,对吗? 还是我误会了什么?
在我的输出thread-1
每次都开始和结束,但是当它循环for
循环时,它不是应该输出所有5
线程吗? 原因是如果只有1个thread
在执行task
那为什么还要5个threads
呢? 所有5
线程都可以在控制台上输出任何方式吗?(我是新手)
您只发布了一个Runnable
因此您的ExecutorService
运行了一项任务。 它只会使用一个线程。 要使用多个线程,您必须多次调用submit
,或者可以使用可运行对象的Collection
调用invokeAll
。
编辑
像这样:
public void test() {
int numberOfThreads = 5;
ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
for(int i=0; i<numberOfThreads; i++){
executorService.submit(createRunnable());
}
}
private Runnable createRunnable() {
return new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("Start" + " " + Thread.currentThread().getName());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("End!" + " " + Thread.currentThread().getName());
}
}
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.