只有一个线程从大小为 5 的 ExecutorService newFixedThreadPool 运行

Gee*_*eek 0 java multithreading

我正在尝试了解 ExecutorService newFixedThreadPool 的行为。我将工作分配给 executorService 并希望它由多个线程完成。

场景很简单。

我初始化大小为 5 的线程池。然后我将工作分配给执行程序服务。但我看到只有一个线程正在处理这项工作。

难道它不应该由池中多个可用线程来处理吗?代码:

        ExecutorService executorService = Executors.newFixedThreadPool(5);

executorService.execute(new Runnable() {
    public void run() {
        int k =0;
        while (k++<5){
        System.out.println("Active Thread "+Thread.currentThread().getName());
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这是完整的代码 jdoodle.com/a/bRP

我得到的输出是

Active Thread pool-1-thread-1
Active Thread pool-1-thread-1
Active Thread pool-1-thread-1
Active Thread pool-1-thread-1
Active Thread pool-1-thread-1
Run Code Online (Sandbox Code Playgroud)

我期望的输出是:

更多线程参与工作。

编辑

本质上我想使用 ExecutorService 复制此行为

package Threading;

public class ThreadDeleteme {
    public static void main(String[] args) {
        Work w = new Work();
        Thread t1 = new Thread(w);
        t1.setName("Thread 1 ");
        Thread t2 = new Thread(w);
        t2.setName("Thread 2 ");
        Thread t3 = new Thread(w);
        t3.setName("Thread 3 ");
        t1.start();
        t2.start();
        t3.start();
        System.out.println("ThreadDeleteme.main()");
    }

}

class Work implements Runnable {
    Integer i = 0;

    @Override
    public void run() {
        while (i < 100) {
            System.out.println(Thread.currentThread().getName() + " " + i);

                i++;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我我的理解哪里出了问题吗?

谢谢

Ser*_*rge 5

您需要创建多个任务,而您只创建了一个任务。因此,类似以下内容应该适合您。但是,如果该任务完成的速度比您创建另一个任务的速度快,则在任何情况下它都可能不会命中所有线程。

   ExecutorService executorService = Executors.newFixedThreadPool(5);

    int k =0;
    while (k++<5){
        executorService.execute(new Runnable() {
             public void run() {
                 System.out.println("Active Thread "+Thread.currentThread().getName());
        });
      }
 };
Run Code Online (Sandbox Code Playgroud)