美文网首页
FutureTask demo

FutureTask demo

作者: grasslike | 来源:发表于2021-12-29 15:15 被阅读0次

将callable 封装到FutureTask

将futureTask submit 到线程池,并测试cancel 逻辑
启动两个线程,主线程在指定时机cancel 到提交到线程池的task ,

public class TestThread {

    public static void main(String[] args) {
        //定义一个task
        Callable callable = new Callable<String>() {
            @Override
            public String call() throws Exception {
                int i =  0;
                while (true){
                    try {
                        Thread.currentThread().sleep(3000);
                        System.out.println("start to count : " + i);
                        i++;
                        if (i == 6)return "ok";
                    }catch (InterruptedException e){
                        System.out.println(" test : interruped");
                        throw e;
                    }
                }
            }
        };
        // 用future 包装task 
        FutureTask<String> futureTask = new FutureTask<>(callable);
        //启动一个线程池
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        // 将task 提交到线程池
        Future<?> submit = executorService.submit(futureTask);
      // 主线程去取消task
        int i = 0;
        while (true){
            try {
                i++;
                Thread.currentThread().sleep(3000);
                System.out.println("main start for i="+i);
                if (i == 3){
                    boolean cancel = submit.cancel(true);
                    if (cancel){
                        System.out.println("canceled , not ok ");
                    }else {
                        System.out.println("get result : " + submit.get());
                    }
                }
            }catch (Exception e){
                System.out.println(" test error main thread");
            }


        }
    }



相关文章

网友评论

      本文标题:FutureTask demo

      本文链接:https://www.haomeiwen.com/subject/euivqrtx.html