如何用固定数量的工作线程实现简单的线程
我正在寻找最简单,最直接的方法来实现以下内容:
n
任务可以一次运行。 n
时,直到正在运行的线程的数量回落到n
以下,才开始更多的工作人员。 我认为Executors.newFixedThreadPool符合你的要求。 有多种不同的方式可以使用生成的ExecutorService,具体取决于是否要将结果返回给主线程,或者该任务是否完全独立,以及是否有一组任务要事先执行,或者任务是否排队响应某些事件。
Collection<YourTask> tasks = new ArrayList<YourTask>();
YourTask yt1 = new YourTask();
...
tasks.add(yt1);
...
ExecutorService exec = Executors.newFixedThreadPool(5);
List<Future<YourResultType>> results = exec.invokeAll(tasks);
或者,如果您有一个新的异步任务来响应某个事件,您可能只想使用ExecutorService的简单execute(Runnable)
方法。
/* Get an executor service that will run a maximum of 5 threads at a time: */
ExecutorService exec = Executors.newFixedThreadPool(5);
/* For all the 100 tasks to be done altogether... */
for (int i = 0; i < 100; i++) {
/* ...execute the task to run concurrently as a runnable: */
exec.execute(new Runnable() {
public void run() {
/* do the work to be done in its own thread */
System.out.println("Running in: " + Thread.currentThread());
}
});
}
/* Tell the executor that after these 100 steps above, we will be done: */
exec.shutdown();
try {
/* The tasks are now running concurrently. We wait until all work is done,
* with a timeout of 50 seconds: */
boolean b = exec.awaitTermination(50, TimeUnit.SECONDS);
/* If the execution timed out, false is returned: */
System.out.println("All done: " + b);
} catch (InterruptedException e) { e.printStackTrace(); }
Executors.newFixedThreadPool(INT)
Executor executor = Executors.newFixedThreadPool(n);
Runnable runnable = new Runnable() {
public void run() {
// do your thing here
}
}
executor.execute(runnable);
链接地址: http://www.djcxy.com/p/16379.html
上一篇: How to implement simple threading with a fixed number of worker threads
下一篇: Why is my Java program leaking memory when I call run() on a Thread object?