假设我有一组对象需要用两种不同的方式进行分析,这两种方法都需要花费较长的时间并且涉及IO调用,所以我试图弄清楚如何/是否可以优化软件的这一部分。 ,尤其是利用多个处理器(我以前使用的机器是8核i7,执行期间几乎永远不会超过10%的负载)。
我对并行编程或多线程技术还很陌生(不确定什么是正确的术语),因此我已经阅读了一些先前的问题,尤其是关注投票率高和信息量大的答案。我也正在阅读有关并发性的Oracle / Sun教程。
到目前为止,这就是我的想法。
我的问题是:
谢谢,
您可以使用BlockingQueue实现来保存对象并从那里生成线程。该接口基于 生产者-消费者 原则。该认沽() ,直到有更多空间和方法将阻塞,如果你的队列已满取()如果直到有一些在队列中再次对象队列为空方法将阻塞。
一个ExecutorService的可以帮助你管理你的线程池。
如果您正在等待生成的线程的结果,那么可以使用 Callable 接口是一个好主意,因为您可以更早地开始计算,并以 Future -s中的结果来处理代码。至于与 Runnable 接口的区别,请 参见 Callable javadoc:
Callable接口与Runnable相似,两者均适用于其实例可能由另一个线程执行的类。 但是,Runnable不会返回结果,也不能引发已检查的异常。
在寻求Java并发性时需要考虑的一些常规事项: