Java Thread学习之三

package com.yiing.study.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * java.util.concurrent中的执行器(Exzcutor)管理Thread类
 * @author Administrator
 *
 */
public class CachedThreadPool {
 public static void main(String[] args){
  
  /**
   * 这里调用的是CachedThreadPool将为每个任务都创建一个线程
   * 通常会创建与所需数量相同的线程,然后在它回收旧线程时停止创建新线程
   *
   * FixedThreadPool
   * 还可以使用Executor.newFixedThreadPool(5),使用了有限的线程集来执行所提交的任务
   * 可以限制线程的数量,不用为每个任务都固定的付出创建线程的开销,在事件驱动的系统中,需要线程的时间处理器,
   * 通过直接从池中获取线程,也可以尽快的获取到服务
   *
   * SingleThreadExecutor
   * 会序列化所有提交给它的线程
   * 每个任务都会在下一个任务开始之前运行结束,所有的任务使用相同的线程
   */
  ExecutorService exec = Executors.newCachedThreadPool();
  
  for(int i = 0; i<5; i++){
   exec.execute(new LiftOff());
  }
  
  /**
   *shutdown()方法的调用可以防止新任务被提交给这个Executor,当前线程(本例中位main()线程)将继续运行在shutdown()被
   *调用之前提交的所有任务。
   *我的理解:Executor是用来创建和管理系统中的所有任务的,所以当有很多个线程的时候,必须要等所有的线程都运行完了,
   *Executor才能够被关闭;
   *举个例子:
   *当我们坐公交车的时候,乘客可以随时上车和下车,但是公交车司机必须要等所有的乘客都下车了以后,才能够停车下班。
   */
  exec.shutdown();
  System.out.println("Shut down");
 }
}
/**
 *运行结果
 Shut down
#0(9),
#2(9),
#3(9),
#4(9),
#0(8),
#2(8),
#3(8),
#4(8),
#0(7),
#2(7),
#3(7),
#4(7),
#0(6),
#2(6),
#3(6),
#4(6),
#0(5),
#2(5),
#3(5),
#4(5),
#0(4),
#2(4),
#3(4),
#4(4),
#0(3),
#2(3),
#3(3),
#4(3),
#0(2),
#1(9),
#3(2),
#2(2),
#4(2),
#0(1),
#2(1),
#0(LiftOff),
#1(8),
#2(LiftOff),
#4(1),
#3(1),
#4(LiftOff),
#1(7),
#1(6),
#3(LiftOff),
#1(5),
#1(4),
#1(3),
#1(2),
#1(1),
#1(LiftOff),
 */

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值