【问题标题】:Java kill thread after some time or when return data from him [duplicate]Java在一段时间后或从他返回数据时杀死线程[重复]
【发布时间】:2018-10-18 08:19:50
【问题描述】:

如果他的时间结束或者它返回我的数据,我怎么能杀死一个线程?

  • 如何开始
  • 我需要为他传递一个 arg

【问题讨论】:

  • 你是如何开始讨论这个话题的?
  • @JohnKugelman 不是重复的。现代 Java 约定不鼓励您显式创建 Thread 对象,因此知道如何杀死一个对象不一定有用。 Thread 各种线程。如果您将此问题视为“如何在特定超时后取消异步任务?” (和it's certain plausible that's what they wanted),这些答案中的建议基本上没有帮助。
  • 绝对是重复的。随意链接更多问题。
  • 如果10秒后不返回数据我想杀了它
  • 有 4 个不同的问题(如何创建线程、如何将 arg 传递给线程、如何杀死线程、如何从线程中获取数据)——它们都太宽泛了.你能分享你为此编写的代码吗?你到底有什么问题?

标签: java multithreading


【解决方案1】:

您可以使用 Future.get 超时。

如果超时,您将收到一个TimeoutException,您可以按照自己喜欢的方式处理它。

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class Main
{
    private static int foo(final int arg)
    {
        /* Uncomment to see future get interrupted
        try
        {
            Thread.sleep(2000); 
        }
        catch (InterruptedException e) { } */

        return 1000 + arg;
    }

    public static void main(String[] args)
        throws ExecutionException, InterruptedException
    {
        final ExecutorService executor = Executors.newSingleThreadExecutor();
        final Future<Integer> future = executor.submit(() -> Main.foo(3));

        try
        {
            int result = future.get(1, TimeUnit.SECONDS);
            System.out.println(result);
        }
        catch (TimeoutException e)
        {
            future.cancel(true);
        }

        executor.shutdown();
    }
}

【讨论】:

  • 它告诉我“无法解析方法'提交'”
  • 我已经添加了导入,以防你导入了错误的东西。如果您不在 Java 8 上,则需要将 lambda 表达式转换为匿名 Callable&lt;Integer&gt;
猜你喜欢
  • 2017-06-17
  • 1970-01-01
  • 2012-11-18
  • 2018-04-07
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多