[英]Start Thread with a given execution time
我的主进程调用外部库方法。 这种方法有时会挂起。 我无法修复外部库,因为另一家公司负责它。
我想使用一个Thread用于具有已定义执行计时器的库调用。 当方法调用为long时,具有放置方法调用的Runnable的Thread应该停止,主进程应该继续。
有没有人有这个逻辑的代码,我可以使用的设计模式或我可以阅读一些信息的网页?
谢谢
这将等待最多30秒的线程完成。
Thread t = new Thread() {
public void run() {
badExternalMethod();
synchronized (this) {
notifyAll();
}
}
};
synchronized (t) {
t.start();
try {
t.wait(30000); // 30 secs
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// t已完成或超时
查看Java 5及更高版本中的java.lang.concurrent
包,特别是CompletionService
接口和实现它的类。
此接口包括允许您提交任务并等待其完成的调用,或者在超时后继续。
你将无法在30秒后神奇地使正在运行的线程停止; 你需要做的是让该线程在时间结束后检查一些状态,注意它花了太长时间并从其run方法return
。
这有两种方法:
在这两种情况下,你需要有一个线程(可能是主线程,因为它没有别的办法)一旦时间到了就将“stop”标志设置为true
(并且这个变量应该被声明为volatile,所以更新被所有线程看到)。 同样,当库调用线程将此标志视为true时,它应该停止它正在执行的操作,通常是从run()方法返回。
你不应该真正从主线程中杀死库线程; 请参阅为什么Thread.stop,Thread.suspend和Thread.resume由于这些原因而被弃用 ,以及一个看起来非常类似于我上面描述的替代方案。 :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.