在java中产生太多线程

时间:2014-10-18 10:37:15

标签: java multithreading

我刚刚发现了什么线程(至少我认为我知道它们是什么:s)。我在java编程,我创建了一个生成字符串的函数。每次方法找到一个字符串时,它都会调用更新方法并将创建的字符串传递给它。 (stringfinder方法是一种递归方法)。

在update()方法中,我想在另一个线程上处理该字符串。但我不知道该怎么做。

目前它看起来像这样

private void update(String input){
new ProcessThread(input).createThreadAndRun();
}

这很有效。但是,我猜测它并不是这样做的,因为更新方法每秒被调用几千次。每次我创建一个新线程。

createThreadAndRun方法如下所示:

@Override
public void createThreadAndRun() {
    Thread thread=new Thread(this,"processThread");
    thread.start();
}

但目前它仍然在向ProcessThreads发送垃圾邮件,因为每次我找到一个字符串时,我都会创建一个新线程。有谁知道如何解决这个问题?所以我只为StringProcessing创建1,2或3个线程?

2 个答案:

答案 0 :(得分:3)

您要做的是在 ExecutorService上运行您的主题。请考虑以下事项:

ExecutorService threadpool = Executors.newFixedThreadPool(4);

然后只需提交您的ProcessThread(应该称为ProcessRunnable或其他内容):

threadPool.submit(new ProcessThread(input));

答案 1 :(得分:0)

您应该使用线程池。我认为this example会为您的实施提供足够的信息。有关更多信息,请查看Java docs

使用线程轮询你可以实现这一点(释义):“由于可以创建的线程数量有限制,应用程序不会像它们进入时那样快地为后台作业(工作线程)提供服务,但它我们将尽快为系统提供服务。“

你可以像这样ExecutorService executor = Executors.newFixedThreadPool(8);创建固定的线程池执行器 并执行与

类似的工作
executor.submit(worker);

其中worker是您的工作类的实例,它实现RunnableCallable<T>