我有一个关于线程操作的问题,你能帮助我吗?
上下文:假设我们有一系列工作要做,如下所示:
while (true) {
Info input = getInfo( length );
Result res = Calculation ( input);
display(res);
}
问题我遇到的有时候,
问题:所以,我想知道是否有办法可以执行下面的伪代码?
Machine machine = new Machine();
// create either a virtual machine or a thread that runs in parallel
machine.start();
while (true) {
Info input = getInfo( length );
Work work = new Work() {
Result res = Calculation ( input);
display(res);
machine.addWork(work);
}
谢谢,
答案 0 :(得分:0)
您可以通过向线程池提交任务来并行调用耗时的方法Calculation(input)
。要以与获得input
的顺序相同的顺序显示计算结果,请使用该任务的队列和单独的线程。
int poolSize = Runtime.getRuntime().availableProcessors();
ExecutorService pool = Executors.newFixedThreadPool(poolSize);
LinkedBlockingQueue<Future<Result>> queue = new LinkedBlockingQueue<>();
new Thread(() -> {
while (true) {
try {
Result res = queue.take().get();
display(res);
} catch (Exception e) {
}
}
}).start();
while (true) {
final Info input = getInfo(length);
Future<Result> res = pool.submit(() -> {
return Calculation(input);
});
queue.put(res);
}