关于java线程中断的问题,demo可以正常跑,但放到项目中就有问题

heymanyou 发布于 2018/10/18 16:52
阅读 130
收藏 0

package com.code.demo;

import java.util.concurrent.Callable;
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 FutureDemo {

    
    
    public static int idx = 0;
    
    public static void job() {
        ExecutorService service = Executors.newSingleThreadExecutor();
         
        Future<String> future = service.submit(new Callable<String>() {

            @Override
            public String call() throws Exception {
                System.out.println("\n开始执行任务"+idx);
                int s = idx;
                while(s>0) {
                    System.out.print(".");
                    TimeUnit.SECONDS.sleep(1);
                    s--;
                }
            
                System.out.println("任务"+idx+"完成");
                return "ok";
            }
        });
        
        try {
            future.get(4, TimeUnit.SECONDS);
        } catch (InterruptedException | ExecutionException | TimeoutException e) {
            future.cancel(true);
            System.out.println("-----任务"+idx+"超时-----");
        } finally {
            service.shutdown();
            System.out.println("清理资源");
        }
    }
    
    public static void main(String[] args) {
        for(int i=0; i<10; i++) {
            idx = i;
            job();
        }
    }
}
 

加载中
0
heymanyou
heymanyou

对于任务超时中断线程有什么好的建议请留下

返回顶部
顶部