java基础--29.线程池的实现方式2-结合Callable对象

Posted 大数据小小罗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础--29.线程池的实现方式2-结合Callable对象相关的知识,希望对你有一定的参考价值。

创建Callable对象

注意:
Callable 是带泛型的接口
这里执行的泛型其实是 call() 方法的返回值类型

/*
 * 线程求和案例:实现 1~x 之间的累加求和
 */
public class MyCallable implements Callable 

    private Integer number = new Integer(0);

    public MyCallable(int number) 
        this.number = number;
    

    @Override
    public Object call() throws Exception 
        int sum = 0;
        for (int x = 1; x <= number; x++) 
            sum += x;
        
        return sum;
    



实现线程池的代码--方法2
/*
 *  A:创建一个线程池对象,控制要创建几个线程对象
 *      static ExecutorService newFixedThreadPool(int nThreads) 
 *      
 *  B:这种线程池的线程可以执行:
 *      可以执行Callable对象代表的线程
 *      做一个类实现Callable接口
 *      
 *  C:调用如下方法:
 *      <T> Future<T> submit(Callable<T> task)  
 *      
 *  D:执行完之后想结束线程,可以吗?
 *      可以
 *      
 *  E:利用返回值获取执行结果
 *      
 */


public class ExecutorsDemo 

    public static void main(String[] args) throws InterruptedException, ExecutionException 
        //1.创建线程池对象
        ExecutorService pool = Executors.newFixedThreadPool(2);

        //2.可以执行Runnable对象或者Callable对象代表的线程
        //利用Future对象接收返回值
        Future<Integer> f1 = pool.submit(new MyCallable(100));
        Future<Integer> f2 = pool.submit(new MyCallable(200));

        //3.通过Future对象的get()方法获取结果,并输出结果
        System.out.println(f1.get());
        System.out.println(f2.get());

        //4.运行结束后,结束线程池
        pool.shutdown();
    


运行结果:

5050
20100

以上是关于java基础--29.线程池的实现方式2-结合Callable对象的主要内容,如果未能解决你的问题,请参考以下文章

Java基础加强之并发常用的多线程实现方式

从阿里Java开发手册学习线程池的正确创建方法

关于线程的创建方式,线程池的作用

阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第5节 线程池_2_线程池的代码实现

java多线程---创建线程的几种方式

Java并发基础 - 线程池