Java ThreadPoolExecutor 没有创建新线程?

Java ThreadPoolExecutor not creating new threads?

我想从使用不同线程的整数共享列表中删除值。为此,我决定使用 ThreadPoolExecutor 服务。

首先,我创建了一个 BlockingQueue 来存储 100 万个值。

 BlockingQueue q = new LinkedBlockingQueue<Integer>();
    for (int i=0;i<100000;i++)
        q.add(i);

其次,我的ThreadPoolExecutor

 ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(2);
 MyExecutorJob job = new MyExecutorJob(q);
 executor.execute(job);

作业正文class是这样的:

public class MyExecutorJob extends Thread
{
   private BlockingQueue<Integer> queue;

   public MyExecutorJob(BlockingQueue<Integer> queue)
   {
    this.queue = queue;
   }

   @Override
   public void run()
   {
       try
       {
           while (!queue.isEmpty())
           {
               Integer x = (Integer) queue.take();
               System.out.println(x + " - " + this.getName());
           }
       }
       catch (Exception ex)
       {
       }

   }
}

结果总是

1 - Thread-0 
2 - Thread-0 
3 - Thread-0 
4 - Thread-0 
....
100000 - Thread-0

看来我的作业不是由两个线程执行的。它始终是相同的线程。 我需要使用两个线程遍历整数值列表。

我做错了什么?有什么我没看到的吗?

谢谢!

1.the错误为this.getName(),请使用Thread.currentThread().getName();

2.you已经初始化了一个有两个线程的线程池,但是你只有一个作业,那么线程池只会提供一个线程来执行你的作业;

以这种方式尝试,但为了测试将 100000 替换为 100:

public static void main(String[] args) {
    ExecutorService executor = Executors.newFixedThreadPool(2);
    IntStream.range(0, 100000).forEach(i ->
        executor.execute(() -> System.out.println(i + " - " + currentThread().getName())));
}