我刚刚发现了什么线程(至少我认为我知道它们是什么: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个线程?
答案 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是您的工作类的实例,它实现Runnable
或Callable<T>