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

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

**步骤:**
    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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值