转换为ExecutorService

时间:2015-10-20 16:18:17

标签: java multithreading concurrency java-threads

我有一个消费者/制作人计划,其中:

  • 要处理的项目(字符串)进入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);
    }
}

转换为执行程序非常简单:字符串将直接进入执行程序,以及Runnable:

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));

但是......每次我实例化一个Task时,它都会实例化一大块代码(处理器) - 我不能这样做,内存需求会很高。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我最终接受了Damien O'Reilly的建议。

然后您需要相应地分配VM堆。或者根据需要水平和/或垂直缩放。但正如你所知,多次实例化一个类,并不会导致所述类字节码的多个副本。 - Damien O'Reilly 10月20日16:43