线程池常用类学习笔记

一、newSingleThreadExecutor (单线程的线程池)

ExecutorService executor = Executors.newSingleThreadExecutor();

通过上面的创建语句,即可创建好一个线程池,但是该线程池只支持装载一个线程,也就是说每次只有一个线程在运行。

向线程池中添加线程实例: 

 public static void main(String[] args) {
 

//1、创建单线程的线程池
  ExecutorService executor =Executors.newSingleThreadExecutor();

//2、创建10个线程
  for (int i = 0; i < 10; i++) {
   final int no =i;
   Runnable runnable = new Runnable(){
    public void run() {
     try {
      System.out.println("into : "+ no);
      Thread.sleep(1000L);
      System.out.println(" end : "+ no);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   };

//3、向线程池中装载线程
   executor.execute(runnable);
  }
  executor.shutdown();
  System.out.println(" Thread Main end!");

 }


二、newCachedThreadPool (具有缓存功能的线程池)

创建线程池:

ExecutorService executor = Executors.newCachedThreadPool();

使用缓存线程池的方式跟上面的类似。


三、newFixedThreadPool (创建固定线程数的线程池)

顾名思义就是可以指定线程数量的线程池,如果线程池只能接收5个线程同时运行,那当添加到第6个线程时,第6个线程将会处理等待状态且不会被执行。

只有当线程池里有一个线程执行结束才会执行第6个线程,其他线程以此类推。

该线程池的特点就是可以指定同时运行的线程数量,对于线程池大小以外的线程则处理等待状态,也就是处于排队的状态。

看下面的实例:

 public static void main(String[] args) {
  

//创建容纳5个线程的线程池
  ExecutorService executor = Executors.newFixedThreadPool(5);

//创建200个测试线程
  for (int i = 0; i < 200; i++) {
   final int no =i;
   Runnable runnable = new Runnable(){
    public void run() {
     try {
      System.out.println("into : "+ no);
      Thread.sleep(1000);
      System.out.println("end : " +no);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   };
   //加载线程到线程池
   executor.execute(runnable);
  }
  executor.shutdown();
  System.out.println("main thread end!");

 }



注:以上例子摘自《JAVA并发编程从入门到精通》张振华书籍


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值