在线程池中运行方法

时间:2013-12-04 13:58:25

标签: java multithreading

我有点不了解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()中包装)吗?

1 个答案:

答案 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来做到这一点。