java线程池

线程池的作用:类似连接池,对线程进行管理。

一般如果程序中需要多次创建线程,多次销毁,那么线程池的作用就体现出来了。

说明:创建线程池,也是创建java对象,线程的创建与销毁都需要时间。

如果 创建时间+销毁时间>任务执行时间。那么创建线程池就很不划算。

根据jvm规范一个线程默认最大栈大小是1M,这个栈空间是需要从系统内存中分配,线程过多,会很消耗内存。

用途:一般用于多线程开发。

线程池组成:

1:线程池管理器:用于创建并管理线程池(创建、添加任务、销毁)

2:工作线程:线程池中的线程,没有任务处于等待状态,可以循环执行任务

3:任务接口:每个任务必须实现接口,以供工作线程调度任务执行,主要规定任务执行的入口,收尾工作,任务执行的状态等。

4:任务队列:用于存放没有处理的任务,提供一种缓冲机制

 

相关api:

 

几点说明:

有些人不知道建立的线程池是否需要关闭,简单提下,个人理解的是    线程池如果建立的是个全局变量,那么各个方法中都可以使用,可能需要频繁调用那么不需要额外的去关闭线程池,如果你关闭了,方法在调用的时候,就无法提交任务,就会直接报错,如果不确定需要申请多少线程合适,那么可以使用带有缓冲的线程池,可以使用

Executors.newCachedThreadPool()来创建。这个线程池在没有任务的时候,其核心线程为0,而且线程也可以多次创建,还可以重复使用,超过指定的超时时间,线程会被自动销毁。

如果是在方法中创建的线程池,那么方法结束后,必须将线程池销毁,为了确保一定会销毁,一般都是放到finaly代码块中。

线程任务数量和队列的大小不同导致执行任务的数量会有所不同

1:有界队列

比如:

 

ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 5, TimeUnit.SECONDS,
      new LinkedBlockingQueue<Runnable>(3), new RejectedExecutionHandler() {
   @Override
   public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
      System.err.println("有任务被拒绝执行了");
   }
});

从上图可以看出这里参数配置:

核心线程数为5,最大线程数为10,超出核心线程的线程存活时间为5s,队列为 LinkedBlockingQueue,长度为3,实现了拒绝执行策略。

如果提交15个任务执行,会发生什么呢?

实际情况是这样的:

首先会去创建5个线程,队列中会缓存3个任务,还有任务,加开线程,同一时间,最大可以开出10个线程,队列可以缓存3个任务。还有两个任务,没有资源执行,就会直接被拒绝。加开的线程在没有任务执行后,5s后就会被销毁。

 

2:无界队列

无界队列,比如这样指定

 

ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());

无界队列,由于可以缓冲最大Integer.Max_Value个任务,基本上可以说是无限大的。这样一来,最大线程数的的设定就显得有些多余了,因为基本上不会遇到加开线程的情况。多余的任务都会缓冲到队列中去。比如上面的那个例子,那么最多只会创建5个线程。多余的都会被放到队列中等待被线程调度。

 

执行任务总结说明:

执行的过程中,如果当前的线程池没有达到核心线程数,那么会建立新的线程执行,

如果队列没有满,后续如果有任务就直接丢到队列,如果队列满了,需要查看最大线程数,如果没有达到最大线程数,那么继续加开线程执行任务,如果达到最大线程了,还有任务被提交,任务会被拒绝执行,如果没有实现拒绝策略,直接报错。

对于计算型任务 :线程数量一般指定为cpu数量的1-2倍。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值