我正在寻找一种方法来告诉这个调用,大约需要 20-120 秒:
final Area image = ...
final AffineTransform transform = new AffineTransform();
transform.scale...
image.transform(transform); //this specific line takes that long
如果调用 Thread.interrupt() 则停止;
因为我只想调用一次,所以我无法在 while(Thread.currentThread.isInterrupted()) 循环中运行一些内容并抛出 InterruptedException。我可以在调用之前和之后运行 if isNotInterrupted,但是如何停止这行代码?
Java中的线程中断是协作的。
但我相信你明白这一点。如果您的仿射变换需要那么长时间才能运行,并且您尝试一口气运行它,甚至不检查中断标志,那么您的变换将愉快地进行变换。
没有Thread.kill()
.
你没有选择。请注意,我不知道这是否可能,但理想情况下,应将如此长时间运行的线程拼接成可管理的可定时块,并在这些块之间检查中断标志。
当然,您也可以选择not在当前线程中运行该转换,但在ExecutorService
相反,并抓住一个Future
结果;你会.get()
有超时。
但最终的问题仍然存在:您必须检查中断标志。你将不得不处理一个TimeoutException
on .get()
.
好吧,我数学很烂。但是这个转换不能分成几个线程吗?例如,您不能使用 fork/join 框架吗?或者更好的是,如果您使用 Java 8,Stream
and a Collector
?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)