我有一个消费者/生产者计划,其中:
- 要处理的项目(字符串)进入 BlockingQueue
- 我从该 BlockingQueue 实例化执行 take() 的固定数量的线程,然后处理这些字符串。
处理线程是此类的实例:
class ProcessingThread extends Thread {
private void process(String s) {
(big method with calls to other big methods)
}
public void run() {
String s = queue.take();
process(s);
}
}
转换为 Executor 将非常简单:字符串将与 Runnable 一起直接进入 Executor:
class Task implements Runnable {
private void process(String s) {
(big method with calls to other big methods)
}
public void run() {
process(s);
}
}
接着:
executor.execute(new Task(s));
但是......每次我实例化一个任务时,它都会实例化一个非常大的代码块(处理器)——我不能这样,内存要求会很高。
我该怎么做呢?