作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从使用不同线程的整数共享列表中删除值。为此,我决定使用 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/
嘿。本周的一个教程,其中一个问题要求通过使用其他函数 formatLine 和 formatList 创建一个函数 formatLines,以格式化行列表。 我的代码是这样的; type Line =
我是一名优秀的程序员,十分优秀!