欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线程池(实现多线程的第三种方式)

程序员文章站 2022-07-10 18:15:52
...

线程池(实现多线程的第三种方式)

**步骤:**
    1:自定义一个类,实现Callable接口
    2:实现里面的call方法
    3:主线程中创建线程对象
    4:用线程池对象提交任务
    5:提交后结束线程池

启动新的线程,很耗费成本,线程池有一个好处:
        里面可以存储多条线程,每一条线程执行完毕,不会变成垃圾,等待下次继续使用!
使用线程池可以解决很多问题:
        1)如何创建线程池对象:
            Executors工厂:专门用来创建线程池的:提供了一个方法
            public static ExecutorService newFixedThreadPool(int nThreads)

        2)这些方法的返回值是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法
        Future<?> submit(Runnable task):Runnable接口作为一个参数:要该类的子实现类对象
        <T> Future<T> submit(Callable<T> task):Future 表示异步计算的结果 接口

        3)线程池可以结束吗?
            可以
                void shutdown()

需求:
用线程池实现求和

代码:
public class MyThreadPool implements Callable{
private int number;
public MyThreadPool(int number){
this.number= number;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for(int x = 0;x<=number;x++){
sum +=x;
}
return sum;
}

}

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

    //启动线程池
    Future<Integer> f1 =es.submit(new MyThreadPool(100));
    Future<Integer> f2 =es.submit(new MyThreadPool(45));

    //获取结果
    int n1 = f1.get();
    int n2 = f2.get();

    System.out.println(n1);
    System.out.println(n2);
}

}

代码结果:

5050
1035

相关标签: 多线程 线程池