如何设置线程的执行限制时间?

时间:2013-09-07 20:19:47

标签: java android multithreading interrupt

我正在创建一个连接线程,如果超过预定的执行限制时间,我需要杀死她。

示例:如果连接尝试时间超过5秒,请中断连接线程。

我该如何实现? :(

我正在使用Android SDK(java)。

由于

2 个答案:

答案 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)

你认为这一切都错了。如果你觉得你需要杀死一个线程,这意味着线程正在做一些你不希望它做的事情。这意味着线程已损坏并且应该被修复。您不希望从外部“到达”线程并使其按照您希望的方式执行。你想从内部编写那个线程,所以它做了什么,而且只做了你真正想做的事情。线程合作完成一项工作。一个线程永远不会被编码以完成不希望完成的工作。

在大多数情况下,您可以单独留下线程。只是停止等待它或尝试别的东西。也许您可能会设置一些标志或给线程一些指示,表明它不再需要工作,并且线程会不时地检查该指示,以便它可以优雅地自行终止。

线程是否在做一些实际上有害的事情必须停止?如果是这样,请在线程中修复它。