【java线程】Callable实现类的两种运行方式

实现类:

复制代码
package com.hy.lab.future;

import java.util.Random;
import java.util.concurrent.Callable;

public class Counter implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        Random rnd=new Random();
        int result=rnd.nextInt(10);
        Thread.sleep(1000*result);

        return result;
    }
}
复制代码

两种运行方式:

复制代码
package com.hy.lab.future;

import java.util.concurrent.*;

public class Test {
    public static void main(String[] args) throws Exception{
        test1();
    }

    // 使用FutureTask执行Counter
    private static void test1() throws Exception{
        FutureTask<Integer> ft=new FutureTask<Integer>(new Counter());
        new Thread(ft).start();
        int result=ft.get();// 阻塞
        System.out.println(result);
    }

    // 使用线程池执行Counter
    private static void test2() throws Exception{
        ExecutorService es=Executors.newCachedThreadPool();
        Future<Integer> ft=es.submit(new Counter());
        int result=ft.get();// 阻塞
        System.out.println(result);

        es.shutdown();
    }
}
复制代码

END

posted @   逆火狂飙  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示