当前位置:  开发笔记 > 编程语言 > 正文

获取线程的输出

如何解决《获取线程的输出》经验,为你挑选了1个好方法。

您认为获得线程工作结果的最佳方法是什么?想象一个线程做一些计算,你如何警告主程序计算完成?

对于一些名为"job finished"的公共变量,你可以每隔X毫秒轮询一次,或者顺便说一下,然后你会收到比它们可用时更晚的结果......主代码会浪费时间等待它们.另一方面,如果使用较低的X,CPU将浪费多次轮询.

那么,你怎么知道Thread或者一些Threads已经完成了他们的工作呢?

很抱歉,如果它看起来与其他问题类似,那可能是eben答案的原因,我想.我所测量的是运行大量线程并知道所有线程何时完成,而不进行轮询.

我更多地考虑使用批量线程在多个CPU之间共享CPU负载,并知道批处理何时完成.我想它可以用Future的对象完成,但是阻塞get方法看起来很像隐藏锁,而不是我喜欢的东西.

谢谢大家的支持.Althought我也喜欢通过回答埃里克森,我觉得SAUA的最完整的,和一个我会在自己的代码中使用.



1> Joachim Saue..:

除非你绝对需要强大的功能和灵活性,否则不要使用线程等低级结构.

您可以使用ExecutorService(如ThreadPoolExecutor)来提交() Callables.这将返回Future对象.

使用该Future对象,您可以轻松检查是否已完成并获得结果(get()如果尚未完成,则包括阻止).

这些构造将极大地简化最常见的线程操作.

我想澄清阻塞get():

这个想法是,要运行一些任务(在Callable那做了一些工作(计算,资源访问,...),您不需要结果S)现在.您可以随时依赖于Executor运行代码(如果是,ThreadPoolExecutor那么只要有空闲线程可用,它就会运行).然后在某个时间点,您可能需要继续计算结果.此时你应该打电话get().如果任务已经在该点运行,那么get()将立即返回该值.如果任务未完成,则get()呼叫将等待任务完成.这通常是期望的,因为无论如何都不能在没有任务结果的情况下继续.

如果你不需要值继续,但想知道它是否已经可用(可能在UI中显示),那么你可以轻松调用isDone(),只有get()在返回时才调用true).


.您可以随时依赖于
继续计算结果.此时你应该打电话
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有