Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java在一段时间后或从他返回数据时杀死线程_Java_Multithreading - Fatal编程技术网

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表达式转换为匿名的
可调用的