首页 > 其他分享 >线程池处理Callable任务

线程池处理Callable任务

时间:2022-11-30 12:34:03浏览次数:34  
标签:get MyCallable Callable 任务 线程 println new

线程池如何处理Callable任务

线程池如何处理Callable任务,并得到任务执行完后返回的结果。
使用ExecutorService的方法:
Future<T> submit(Callable<T> command)

package com.itheima.d8_threadpool;

import java.util.concurrent.Callable;

/**
    1、定义一个任务类 实现Callable接口  应该申明线程任务执行完毕后的结果的数据类型
 */
public class MyCallable implements Callable<String>{
    private int n;
    public MyCallable(int n) {
        this.n = n;
    }

    /**
       2、重写call方法(任务方法)
     */
    @Override
    public String call() throws Exception {
        int sum = 0;
        for (int i = 1; i <= n ; i++) {
            sum += i;
        }
        return Thread.currentThread().getName()
                + "执行 1-" + n+ "的和,结果是:" + sum;
    }
}

 

package com.itheima.d8_threadpool;

import java.util.concurrent.*;

/**
    目标:自定义一个线程池对象,并测试其特性。
 */
public class ThreadPoolDemo2 {
    public static void main(String[] args) throws Exception {
        // 1、创建线程池对象
        /**
         public ThreadPoolExecutor(int corePoolSize,
                                 int maximumPoolSize,
                                 long keepAliveTime,
                                 TimeUnit unit,
                                 BlockingQueue<Runnable> workQueue,
                                 ThreadFactory threadFactory,
                                 RejectedExecutionHandler handler)
         */
        ExecutorService pool = new ThreadPoolExecutor(3, 5 ,
                6, TimeUnit.SECONDS, new ArrayBlockingQueue<>(5) , Executors.defaultThreadFactory(),
               new ThreadPoolExecutor.AbortPolicy() );

        // 2、给任务线程池处理。
        Future<String> f1 = pool.submit(new MyCallable(100));
        Future<String> f2 = pool.submit(new MyCallable(200));
        Future<String> f3 = pool.submit(new MyCallable(300));
        Future<String> f4 = pool.submit(new MyCallable(400));
        Future<String> f5 = pool.submit(new MyCallable(500));

//        String rs = f1.get();
//        System.out.println(rs);

        System.out.println(f1.get());
        System.out.println(f2.get());
        System.out.println(f3.get());
        System.out.println(f4.get());
        System.out.println(f5.get());
    }
}

 

标签:get,MyCallable,Callable,任务,线程,println,new
From: https://www.cnblogs.com/popopopopo/p/16938058.html

相关文章

  • Executors:线程池的工具类处理线程
    Executors:线程池的工具类处理线程Executors得到线程池对象的常用方法Executors:线程池的工具类通过调用方法返回不同类型的线程池对象。Executors的底层其实也是基于线......
  • 线程池处理Runnable任务
    线程池如何处理Runnable任务使用ExecutorService的方法:voidexecute(Runnabletarget)packagecom.itheima.d8_threadpool;publicclassMyRunnableimplementsRunn......
  • 如何通过链路追踪进行定时任务诊断
    作者:千习背景简介什么是定时任务定时任务是业务应用系统中存在定时周期性运行的业务逻辑。由于其运行于后端进程中往往存在执行状态和执行链路的不可见性《常见定时任务......
  • 如何通过链路追踪进行定时任务诊断
    作者:千习背景简介什么是定时任务定时任务是业务应用系统中存在定时周期性运行的业务逻辑。由于其运行于后端进程中往往存在执行状态和执行链路的不可见性《常见定时任务技术......
  • Qt网络编程-从0到多线程编程
    网络编程开发1.简介两个协议,一个是TCP协议,一个是UDP协议先说TCP:TCP的话,服务器端需要端口监听,直到有客户端进行连接发送过来请求数据,然后客户端根据请求数据进行应答,之......
  • Qt多线程开发总览,既然用到了就记录一下
    多线程在LBD_VM_Intercom中使用的一个简单的实例陶工给的dll需要进行异步操作才可以将视频画面附到窗体上,必须得在画面出现之后才可以附加画面,否则就有可能出现意外bug,所......
  • Qt自带的阴影类、跨线程问题汇总、hover相关、全屏轮子,一些思考。
    一点思考:故事的结局重不重要?我语文不好,但是我数学不好。我数学不好,但是我英语不好。我英语不好,但是我物理不好。我物理不好,但是我化学不好。我化学不好,但是我历史不好......
  • 线程池
    线程池什么是线程池?线程池就是一个可以复用线程的技术。不使用线程池的问题如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线......
  • Linux如何查看定时任务
    crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。Linux查看定......
  • Python爬取m3u8视频(多线程)- OK好用,代码在文章尾
    摘自:https://www.cnblogs.com/python147/p/14511627.html1.前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。......