【发布时间】:2017-11-22 20:39:01
【问题描述】:
我们有一个大文本文件,其中每一行都需要大量的process。设计是有一个class,它读取文件并将每一行的处理委托给thread,通过thread pool。一旦池中没有空闲线程来进行处理,应该阻止文件读取器类读取下一行。所以我需要一个blocking thread pool
在当前的实现中,ThreadPoolExecutor.submit() 和 ThreadPoolExecutor.execute() 方法在配置的线程数变忙后抛出 RejectedExecutionException 异常,如下面的代码 sn-p 所示。
public class BlockingTp {
public static void main(String[] args) {
BlockingQueue blockingQueue = new ArrayBlockingQueue(3);
ThreadPoolExecutor executorService=
new ThreadPoolExecutor(1, 3, 30, TimeUnit.SECONDS, blockingQueue);
int Jobs = 10;
System.out.println("Starting application with " + Jobs + " jobs");
for (int i = 1; i <= Jobs; i++)
try {
executorService.submit(new WorkerThread(i));
System.out.println("job added " + (i));
} catch (RejectedExecutionException e) {
System.err.println("RejectedExecutionException");
}
}
}
class WorkerThread implements Runnable {
int job;
public WorkerThread(int job) {
this.job = job;
}
public void run() {
try {
Thread.sleep(1000);
} catch (Exception excep) {
}
}
}
上述程序的输出是
Starting application to add 10 jobs
Added job #1
Added job #2
Added job #3
Added job #4
Added job #5
Added job #6
RejectedExecutionException
RejectedExecutionException
RejectedExecutionException
RejectedExecutionException
有人可以说明一下,即我如何实现阻塞线程池。
【问题讨论】:
-
我先误读了你的问题;并提出一个虚假的答案;我希望修改后的版本对你有用。
-
@GhostCat- 完成谢谢。
标签: java multithreading threadpoolexecutor