我有一个CPU密集型应用程序,可以用Java编写。该应用程序由几个独立运行的作业(线程)组成。
如果我一次启动所有线程,系统将会超载。我怎么能一次启动最多n个线程,当一个线程完成然后启动一个新线程?通过限制一次运行的线程数,我打算让其他一些处理器/内核可用于其他任务。
由于
答案 0 :(得分:15)
您应该将线程的任务表示为Runnable
或Callable
,然后将它们提交给固定的线程池执行程序。执行程序将管理工作线程池并从这些线程上的内部队列运行您的任务。
有关创建所需执行程序类型的工厂方法,请参阅Executors#newFixedThreadPool。
答案 1 :(得分:7)
使用固定大小的执行程序池。
ExecutorService executor = Executors.newFixedThreadPool(4);