Java在一段时间后或从他返回数据时杀死线程
如果线程的时间结束了,或者线程返回了数据,我如何杀死线程Java在一段时间后或从他返回数据时杀死线程,java,multithreading,Java,Multithreading,如果线程的时间结束了,或者线程返回了数据,我如何杀死线程 我怎么开始的 我需要给他传一个arg 您可以在超时的情况下使用 如果超过超时,您将得到一个TimeoutException,您可以用任何方式处理它 import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.ut
- 我怎么开始的
- 我需要给他传一个arg
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();
}
}
import java.util.concurrent.ExecutionException;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入java.util.concurrent.Future;
导入java.util.concurrent.TimeUnit;
导入java.util.concurrent.TimeoutException;
公共班机
{
私有静态int-foo(最终int-arg)
{
/*取消注释以查看将来是否被中断
尝试
{
《睡眠》(2000年);
}
捕获(中断异常e){}*/
返回1000+arg;
}
公共静态void main(字符串[]args)
抛出ExecutionException、InterruptedException
{
final ExecutorService executor=Executors.newSingleThreadExecutor();
最终未来=executor.submit(()->Main.foo(3));
尝试
{
int result=future.get(1,TimeUnit.SECONDS);
系统输出打印项次(结果);
}
捕获(超时异常e)
{
future.cancel(true);
}
executor.shutdown();
}
}
你是如何开始讨论的线程的?@JohnKugelman不是重复的。现代Java约定不鼓励您显式地创建线程
对象,因此知道如何杀死对象并不一定有用<代码>线程各种线程。如果您将此问题视为“在某个超时后如何取消异步任务?”(和),则这些答案中的建议基本上没有帮助。它肯定是重复的。请随意链接更多问题。如果10秒后它不返回数据,我想终止它。有4个不同的问题(如何创建线程,如何将arg传递给线程,如何终止线程,如何从线程获取数据)-所有这些问题都太广泛了。你能分享一下你为此写的代码吗?你到底有什么问题?它告诉我“无法解决方法‘提交’”。我添加了导入,以防你导入了错误的东西。如果不在Java8上,则需要将lambda表达式转换为匿名的可调用的。