java 方法超时

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

public class T {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        functionTimeout(2000);
    }
    
    public static void theFunction() {
        
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static void functionTimeout(int seconds){
        
        ExecutorService executorService= Executors.newSingleThreadExecutor();
        
        FutureTask<String> future=new FutureTask<>(()->
                {
                    theFunction();
                    return "END";
                }
        );
        executorService.execute(future);

        try {
            future.get(seconds,TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TimeoutException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/1886vip/p/10754674.html
今日推荐