首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中实现多线程

如何在Java中实现多线程
EN

Stack Overflow用户
提问于 2011-11-01 20:39:58
回答 4查看 2.2K关注 0票数 2

我必须对一个方法进行多线程处理,这个方法可以运行1000个批次的代码。我需要将这些批次分配给不同的线程。

目前我已经生成了3个线程,但所有3个线程都是第一批1000个线程。我希望其他批次不应该选择相同的批次,而应该选择其他批次。

请大家多多指教。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-01 20:51:14

我会使用ExecutorService

代码语言:javascript
复制
int numberOfTasks = ....
int batchSize = 1000;
ExecutorService es = Executors.newFixedThreadPool(3);
for (int i = 0; i < numberOfTasks; i += batchSize) {
    final int start = i;
    final int last = Math.min(i + batchSize, numberOfTasks);
    es.submit(new Runnable() {
        @Override
        public void run() {
            for (int j = start; j < last; j++)
                System.out.println(j); // do something with j
        }
    });
}
es.shutdown();
票数 9
EN

Stack Overflow用户

发布于 2011-11-01 20:41:37

您需要同步对批处理中作业列表的访问。(“同步”本质上是指“确保线程知道潜在的竞争条件”。在大多数情况下,这意味着“让某个方法一次由一个线程执行”。)

这是使用java.util.concurrent包最容易解决的问题。看看BlockingQueue的各种实现,例如ArrayBlockingQueueLinkedBlockingQueue

票数 3
EN

Stack Overflow用户

发布于 2011-11-01 20:42:01

将批处理放在一个BlockingQueue中,并使您的工作线程从队列中获取批处理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7966593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档