我有点不了解java.util.concurent包,所有那些服务和执行器。
我需要一个非常简单的事情 - 让我说我有
for( int i=0;i<1000;i++){
doSomething(i); //all tasks are run 10ms and does not lock each other
}
将此代码转换为由10个线程组运行的最简单方法是什么。
如果可能,我可以将建议的解决方案重新用于另一组任务(不是每次都在run()中包装)吗?
答案 0 :(得分:1)
以下是您的需求:
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 1000; i++) {
Runnable worker = new doSomething(i);
executor.execute(worker);
}
executor.shutdown();
并且你的doSomething类将是这样的:
class doSomething implements Runnable {
int i=0;
doSomething(int i) {
this.i = i;
}
@Override
public void run() {
try {
// Do what you want here
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
已编辑:ExecutorService#shutdown()
启动有序关闭,其中先前提交的任务已执行,但不会接受任何新任务。如果已经关闭,调用没有其他影响。
此方法不会等待先前提交的任务完成执行。使用awaitTermination来做到这一点。