gpt4 book ai didi

Java ThreadPoolExecutor 不创建新线程?

转载 作者:行者123 更新时间:2023-11-29 04:30:45 26 4
gpt4 key购买 nike

我想从使用不同线程的整数共享列表中删除值。为此,我决定使用 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);

作业类的主体是这样的:

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.错误是this.getName(),请使用Thread.currentThread().getName();

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

关于Java ThreadPoolExecutor 不创建新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43869110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com