java - Java在一段时间后或从他返回数据时杀死线程
问题描述
如果他的时间结束或它返回我的数据,我怎么能杀死一个线程?
- 我如何开始
- 我需要为他传递一个参数
解决方案
您可以使用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();
}
}
推荐阅读
- c# - 如何在一个命令中增加大于 1 的整数值?
- c++ - 如何在 C++ 中访问对的集合
- java - 杰克逊中用于枚举的自定义 xml 反序列化器
- java - 在同一方法中同步多个块
- php - 验证失败时出现未找到错误
- javascript - Javascript字符串与变量值差异
- javascript - Aws dynamodb 错误错误 [UnknownError]:未找到 (aws-sdk)
- docker - 为什么我需要一个像 BusyBox、Alpine 和 JDK 这样的容器基础镜像?如果我的主机操作系统是 Linux 并且里面有 JDK?
- javascript - 从 JS 代码设置为 0 时,CSS flex 属性没有正确响应
- javascript - 单击按钮打开模式页面