首页 技术 正文
技术 2022年11月15日
0 收藏 667 点赞 4,824 浏览 1490 个字

线程池的作用

  1.降低资源的消耗

  2.提高效率

  3.方便管理

相关概念

  corePoolSize核心线程数:核心池的大小,当有任务到达之后,就会创建一个线程去执行任务,当任务数量到达核心线程数后,就会把到达的任务放到缓存队列中去。

  maximumPoolSize: 线程池最大线程数,它表示在线程池中最多能创建多少个线程。

  keepAliveTime:表示线程没有任务执行是,最多保持多久的时间就会终止。

  unit:参数keepAliveTime的时间单位,有7种取值,具体在TimeUnit类中。

线程池运行原理:

     1.原理剖析

     提交一个任务到线程池中,线程池的处理流程如下:

    ①判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创建)则创建一个新的工作线程来执行任务。如果核心线程都在执行任      务,则进入下个流程。

    ②线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。

    ③判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。

  JAVA线程池的原理分析

线程池的使用:

  1.自定义线程池注意事项

  如果当前线程池中的线程数目小于corePoolSize,则每来一个任务,就会创建一个线程去执行这个任务;

  如果当前线程池中的线程数目>=corePoolSize,则每来一个任务,会尝试将其添加到任务缓存队列当中,若添加成功,则该任务会等待空闲线程将其取出去执行;若添加失败    (一般来说是任务缓存队列已满),则会尝试创建新的线程去执行这个任务;

  如果队列已经满了,则在总线程数不大于maximumPoolSize的前提下,则创建新的线程

  如果当前线程池中的线程数目达到maximumPoolSize,则会采取任务拒绝策略进行处理;

  如果线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止,直至线程池中的线程数目不大于corePoolSize;如果允许为核心池中  的线程设置存活时间,那么核心池中的线程空闲时间超过keepAliveTime,线程也会被终止。

  2.代码编写:

public class MyThreadpoll {
public static void main(String[] args) {
ThreadPoolExecutor th = new ThreadPoolExecutor(1, 2, 0L, TimeUnit.MICROSECONDS, new LinkedBlockingQueue<>(3)); for (int i = 0; i < 6; i++) {
TaskThread tt = new TaskThread("任务 " + i);
th.execute(tt);
} th.shutdown();
}
}class TaskThread implements Runnable { private String threadName; public TaskThread(String threadName) {
this.threadName = threadName;
} @Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": " + threadName); }}

  根据上述的原理分析可以看出,当for循环运行到  i = 5时也就是运行第6个线程时,程序抛出异常

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,085
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,560
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,409
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,182
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,819
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,902