我正在创建一个连接线程,如果超过预定的执行限制时间,我需要杀死她。
示例:如果连接尝试时间超过5秒,请中断连接线程。
我该如何实现? :(
我正在使用Android SDK(java)。
由于
答案 0 :(得分:4)
如果您使用的是套接字,可以像这样设置超时限制:
Socket s1 = new Socket();
s1.setSoTimeout(200);
s1.connect(new InetSocketAddress("192.168.1.2", 1254), 200);
如果你想在线程中加上一个时间限制,你可以使用Executors。
try {
int timeout = 5;
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(new Task()), timeout, TimeUnit.SECONDS);
executor.shutdown();
} catch (Exception e) {
}
答案 1 :(得分:1)
你认为这一切都错了。如果你觉得你需要杀死一个线程,这意味着线程正在做一些你不希望它做的事情。这意味着线程已损坏并且应该被修复。您不希望从外部“到达”线程并使其按照您希望的方式执行。你想从内部编写那个线程,所以它做了什么,而且只做了你真正想做的事情。线程合作完成一项工作。一个线程永远不会被编码以完成不希望完成的工作。
在大多数情况下,您可以单独留下线程。只是停止等待它或尝试别的东西。也许您可能会设置一些标志或给线程一些指示,表明它不再需要工作,并且线程会不时地检查该指示,以便它可以优雅地自行终止。
线程是否在做一些实际上有害的事情必须停止?如果是这样,请在线程中修复它。