首页 > 解决方案 > Java在一段时间后或从他返回数据时杀死线程

问题描述

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

标签: javamultithreading

解决方案


您可以使用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();
    }
}

推荐阅读