首页 > 其他分享 >线程池ThreadPoolExecutor配合callable获得线程执行结果

线程池ThreadPoolExecutor配合callable获得线程执行结果

时间:2024-10-31 17:01:30浏览次数:1  
标签:poolExecutor callable 线程 new public MyCallableBakeUser ThreadPoolExecutor

此处记录使用callable创建线程,使用线程池执行,看下是否有进行线程复用并且FutureTask返回结果

线程创建

public class MyCallableBakeUser implements Callable<String> {

    private int a ;

    public MyCallableBakeUser(int a){
        this.a = a;
    }


    @Override
    public String call() throws Exception {

        int sum = 0;

        for (int i = 0; i < a; i++) {
            sum += i;
        }

        return Thread.currentThread().getName() + " 线程求和:" + sum;
    }
}

使用main测试

public class ThreadCallPool {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(3,5,8,
                TimeUnit.SECONDS,new ArrayBlockingQueue<>(4),
                Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
        Future<String> future = poolExecutor.submit(new MyCallableBakeUser(10));
        Future<String> future1 = poolExecutor.submit(new MyCallableBakeUser(20));
        Future<String> future2 = poolExecutor.submit(new MyCallableBakeUser(30));
        Future<String> future3 = poolExecutor.submit(new MyCallableBakeUser(40));
        System.out.println(future.get());
        System.out.println(future1.get());
        System.out.println(future2.get());
        System.out.println(future3.get());


    }

}

控制台打印:

pool-1-thread-1 线程求和:45
pool-1-thread-2 线程求和:190
pool-1-thread-3 线程求和:435
pool-1-thread-1 线程求和:780

核心线程数为3个,说明线程得到复用,同时也得到callable的返回值

 

以上内容纯属学习!

 

标签:poolExecutor,callable,线程,new,public,MyCallableBakeUser,ThreadPoolExecutor
From: https://www.cnblogs.com/qwg-/p/18518325

相关文章

  • 使用ThreadPoolExecutor线程池消化线程执行代码
    此处记录一个使用ThreadPoolExecutor线程池的demo线程代码publicclassExcutorRunnableimplementsRunnable{@Overridepublicvoidrun(){System.out.println(Thread.currentThread().getName()+":线程执行666");try{Thread.......
  • 线程池原理
    线程池是一种多线程处理方式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有......
  • 多线程在打包工具中的运用
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:UED团队现代操作系统都是「多任务」的,也就是操作系统可以「并发」处理多个任务,比如可以在浏览页面的时候同时播放音乐。但是,一般来说我......
  • 多线程编程 Linux环境
    进程和线程相同点:都是参与时间片轮转的任务,都有5个状态不同点:线程不能独立存在,只能隶属于创建它的进程进程实际上是线程的容器,任何进程至少包含一个称为主线程的线程,执行main函数所在的执行序列,这个线程是系统为进程自动创建而其余线程则进程通过调用相关函数来创建进......
  • C++多线程应用
    一个进程就是一个程序,一个程序里不止一个功能,每个功能的实现就可以交给一个线程去完成。一个进程就像是一个工程,这个工程里,有设计,有监理,有施工,就相当于三个线程,各干各的又相互配合。https://cplusplus.com/reference/thread/thread/thread/是C++的官方参考,个人觉得比较权威,比经......
  • 【操作系统】1.进程和线程
    1.进程(Process)定义:进程是操作系统资源分配的基本单位,一个进程包含了程序的代码、数据、文件、内存等资源。每个进程之间都是独立的,拥有独立的地址空间。特性:独立性:每个进程之间是独立的,不能直接访问其他进程的内存空间。资源占用:进程会占用较多的系统资源,例如内存、文件描......
  • Linux系统基础-多线程超详细讲解(3)_线程互斥同步和条件变量
    个人主页:C++忠实粉丝欢迎点赞......
  • Java多线程
    1.相关概念1.1程序,进程与线程程序(Program):为完成特定任务,用某种语言编写的一组指令的集合,即指一段静态的代码,静态对象。进程(Process)  :进程是操作系统中执行的程序的实例。它是系统资源分配的基本单位,包括内存空间、文件描述符等。每个进程都有自己的地址空间,进程间的......
  • C系统编程——线程的互斥与同步
        一般每个程序都会有多个线程,也不能确定每个线程所需要的资源都是独立的,如果有两个线程需要同一个资源,且其中一个使用后却将其给释放掉了,那另一个就会得不到资源导致系统卡死,这也便是死锁,这是我们就新加了新的知识:互斥与同步来预防这类问题的发生。1.概念   ......
  • 16.1 并发编程基础——Java多线程
    16.1并发编程基础——Java多线程16.1.1 引言Java语言的一个重要特点是内在支持多线程的程序设计。多线程的程序设计具有广泛的应用。线程的概念来源于操作系统进程的概念。进程是一个程序关于某个数据集的一次运行。也就是说,进程是运行中的程序,是程序的一次运行活动。线......