Java 多线程分配工作

Java 多线程分配工作,java,multithreading,threadpool,Java,Multithreading,Threadpool,在循环中创建和使用线程的正确方法是什么 如果我想处理一百万个项目,我会创建一个循环来完成。因此,为了提高效率,我将使它成为多线程的,并将每个项目分配给一个线程。假设我创建了五个线程来处理这个问题。如何将工作分配给线程 如果一个线程有一个较小的项目要处理,那么它就可以自由地处理另一个项目了——如何将循环中的下一个项目分配给该线程 我是否在循环外部创建线程,然后在循环内部使用它们 这是我正在研究的一个例子——它缺少创建要处理的对象,只使用了两个线程,但我认为这里的人足够聪明,知道我的意思:) 公共类

在循环中创建和使用线程的正确方法是什么

如果我想处理一百万个项目,我会创建一个循环来完成。因此,为了提高效率,我将使它成为多线程的,并将每个项目分配给一个线程。假设我创建了五个线程来处理这个问题。如何将工作分配给线程

如果一个线程有一个较小的项目要处理,那么它就可以自由地处理另一个项目了——如何将循环中的下一个项目分配给该线程

我是否在循环外部创建线程,然后在循环内部使用它们

这是我正在研究的一个例子——它缺少创建要处理的对象,只使用了两个线程,但我认为这里的人足够聪明,知道我的意思:)

公共类应用程序
{
公共静态void main(字符串[]args)
{
应用程序a=新应用程序();
a、 doTest();
}
私有void doTest(){
计数c=新计数(21);
计数c2=新计数(7);
螺纹t=新螺纹(c);
螺纹t2=新螺纹(c2);
t、 start();
t2.start();
对于(int f=0;f<10;f++){
//这里-如何选择将工作发送到哪个线程?
//??????.processThis(nextObject);//如何将其发送到正确的线程(空闲或工作最少的线程?)
}
}
公共类计数实现可运行{
私人整数计数;
public void processThis(对象someItemToProcess){
//在这里,我将把对象设置为process并调用方法来处理它
}
公共计数(整数计数){
this.count=计数;
}
@凌驾
公开募捐{
//为了说明的目的
//对于(int i=1;i
这些问题通常通过线程池来解决,您可以将任务提供给线程池并等待完成。在Java中,有几个线程池的实现,您可以从一个固定大小的线程池开始学习:

// Create a thread pool
ExecutorService executor = Executors.newFixedThreadPool(threadsCount);

// Submit your tasks to the pool:
for (Count c: myCounts) {
    executor.submit(c);
}

// Shutdown the pool when you don't need it
executor.shutdown();
池将负责并行执行您的任务。如果需要控制任务的执行、等待任务完成、取消任务、获取任务结果等,只需使用
submit()
方法返回的
Future
对象即可。你可以使用游泳池,只要你需要它,但是当你不再需要它的时候不要忘记关闭它


进一步了解各种
Executor
实现及其功能,以便能够以最佳方式找到符合您需求的实现。

您尝试学习了吗?读一本书辅导的看视频?你看到过使用线程的例子吗?解决办法是什么?嗨,阿尔梅蒂-是的,我试着学习我正在这样做,但所有教程/视频等都提到创建一个线程以计数到10或并发问题,而不是实际的工作分配。听起来你知道我问题的答案,并且觉得它很琐碎,所以你能回答它或避免进一步的批评吗?谢谢相关有用的问题:Upvoted:)只是一个快速提醒,在Java8中引入了一个增强的Future:CompletableFuture,它允许更简单、更强大地处理异步作业同步。
// Create a thread pool
ExecutorService executor = Executors.newFixedThreadPool(threadsCount);

// Submit your tasks to the pool:
for (Count c: myCounts) {
    executor.submit(c);
}

// Shutdown the pool when you don't need it
executor.shutdown();