当前位置:首页 > 学习资源 > 讲师博文 > Java 线程池详解

Java 线程池详解 时间:2024-02-20      来源:华清远见

1 什么是线程

线程(Thread)是计算机中的一条执行路径,它是进程中的一个实体,负责程序中的指令执行。在一个进程中可以包含多个线程,每个线程可以并行执行不同的任务,从而加快程序的运行速度。

 

线程独立于进程而存在,但是它们都处于操作系统所分配的资源上下文中。线程需要依赖于进程来获得运行资源,如内存、CPU 时间等。在多线程编程中,线程可以共享进程的资源,因此线程之间可以更加高效地完成任务。

 

使用线程可以提高程序的响应速度和并发性,特别是在多核 CPU 的环境下,可以充分利用 CPU 资源,提高程序的运行效率。但是多线程编程也存在一些问题,比如线程安全、死锁等,需要开发者注意和处理

2 什么是线程池

线程池(Thread Pool)是一种用于管理和调度线程的机制。它是在应用程序启动时创建一组预先初始化的线程,并将这些线程放入一个池中,供需要执行任务的代码使用。

 

线程池的主要目的是重用线程,避免频繁创建和销毁线程的开销,提高程序的性能和资源利用率。当有新的任务到达时,线程池从池中取出一个空闲的线程来执行任务,执行完毕后线程并不立即销毁,而是返回线程池等待下一次任务的到来。

 

 

3 线程池的作用

线程池主要有两个作用:

 

● 重复利用已经创建的线程,避免创建和销毁线程的开销;

● 控制并发线程的数量,避免过多的线程占用系统资源。

4 线程池的实现方式

Java 线程池可以通过 ThreadPoolExecutor 类来实现,该类提供了一系列的构造方法,可以根据不同的需求来创建线程池。常用的构造方法如下:

 

 

其中,参数解释如下:

 

● corePoolSize:核心线程数,即线程池中最少需要保持的线程数量;

● maximumPoolSize:最大线程数,即线程池中允许存在的最多线程数量;

● keepAliveTime:线程空闲时间,即当线程空闲时间超过该值,且当前线程数量超过 corePoolSize,则该线程会被销毁;

● unit:空闲时间的单位;

● workQueue:工作队列,用于存放等待执行的任务。

 

5线程池的工作流程

线程池的工作流程如下:

 

1) 当任务到来时,线程池会先判断当前线程池中的线程数量是否达到了 corePoolSize,如果没有,则创建一个新的线程执行该任务。

2) 如果当前线程池中的线程数量已经达到了 corePoolSize,则将任务加入到工作队列中等待执行。

3) 当工作队列已满时,线程池会继续创建新的线程执行任务,直到线程数量达到了 maximumPoolSize。

4) 如果线程数量已经达到了 maximumPoolSize,且工作队列已经满了,则线程池会根据设置的拒绝策略进行处理,一般情况下会抛出异常。

 

6 线程池的拒绝策略

ThreadPoolExecutor 类提供了四种拒绝策略:

 

1) AbortPolicy:默认策略,当任务无法被处理时,会抛出 RejectedExecutionException 异常;

2) CallerRunsPolicy:当任务无法被处理时,会在提交任务的线程上直接执行该任务;

3) DiscardOldestPolicy:当任务无法被处理时,会丢弃等待队列中最旧的任务,并尝试重新提交该任务;

4) DiscardPolicy:当任务无法被处理时,会直接丢弃该任务。

 

7线程池的使用注意事项

1) 线程池的参数需要根据具体业务场景进行调整,以充分利用系统资源;

2) 避免使用无界队列,因为当任务过多时,会导致内存溢出;

3) 在销毁线程池时,需要先调用 shutdown() 方法关闭线程池,然后再调用 awaitTermination() 方法等待所有任务执行完成,最后再调用 shutdownNow() 方法强制关闭线程池。

 

8 java创建线程的案例

 

Java 创建线程常见有两种方式

1) 继承自 Thread 类的 MyThread 类,案例如下

2) 实现Runnable接口,案例如下

9 java创建线程池的案例

以下是一个使用 Java 创建线程池的简单案例:

上一篇:嵌入式security

下一篇:嵌入式和单片机的区别

戳我查看2020年嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部