如何在Java中重用一个线程?

Dav*_*vid 13 java performance multithreading sudoku threadpool

我是一个控制台数独求解器,其主要目标是原始速度.

我现在有一个ManagerThread,它启动WorkerThreads来计算每个单元格的neibhbors.因此,现在为每个单元启动一个WorkerThread.如何重新使用已完成其工作的现有线程?

线程池模式似乎是解决方案,但我不明白如何防止线程在其工作完成后死亡.

ps:我不希望这个特定任务获得太多性能,只是想在将多线程应用到更复杂的代码部分之前尝试多线程的工作原理.

谢谢

Bal*_*usC 14

看看Java SE提供的java.util.concurrentAPI.您可以使用创建线程池Executors#newFixedThreadPool(),也可以使用这些ExecutorService方法提交任务.无需重新发明自己的线程池.另请参阅有关此主题Sun教程.

  • @TJ有一个公平的观点.@David,检查[`Runtime#availableProcessors()`](http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#availableProcessors%28%29). (4认同)
  • @David:请记住,对于纯计算任务,拥有比可用内核更多的线程将减慢而不是加速代码.显然,如果您在I/O上有线程阻塞,则会发生更改. (2认同)