随笔分类 - 线程池
摘要:1、为什么要使用线程池? 反复创建线程系统开销比较大,而且每个线程的创建和销毁都需要时间, 如果任务比较简单,那么有可能导致线程的创建和销毁占用的资源超过执行任务所消耗的资源. 如果当要执行的任务比较多时,每个线程负责一个任务,那么需要创建很多线程去执行任务,过多的线程会占用过多的内存资源等,还会带
阅读全文
摘要:线程池可以把线程和任务进行解耦,线程归线程,任务归任务,摆脱了之前通过 Thread 创建线程时的一个线程必须对应一个任务的限制。在线程池中,同一个线程可以从 BlockingQueue 中不断提取新任务来执行,其核心原理在于线程池对 Thread 进行了封装,并不是每次执行任务都会调用 Threa
阅读全文
摘要:如何正确关闭线程池首先有5种在ThreadPoolExecutor中涉及的关闭线程的方法,我们挨个来分析。 void shutdown() 它可以安全的关闭一个线程池,调用shutdown()方法后,线程池不会立刻关闭,而是等执行完正在执行的任务和队列中等待的任务后才彻底关闭,而且调用shutdow
阅读全文
摘要:如何自定义合适的线程池 这个也是面试中会被问到的问题,如果自定义合适的线程池呢?首先我们要调整线程池中的线程数量以便充分并合理的使用CPU和内存资源,从而最大限度的提高性能. CPU密集型任务 如果任务是一些列比较消耗CPU资源的任务,比如加密、解密、压缩、计算等,那么最佳线程数是CPU核心数的1~
阅读全文
摘要:首先自动创建线程池通过直接调用Executors.newXXXXThreadPool()方法直接创建线程池.但是开发中我们不能直接使用创建的线程池,原因如下: FixedThreadPool 通过下面FiexdThreadPool内部代码可以看出,FixedThreadPool内部调用的是Threa
阅读全文
摘要:1、FixedThreadPool 这个线程池的核心线程数和最大线程数是一样的,所以可以看作是固定线程数的线程池 特点是当线程达到核心线程数后,如果任务队列满了,也不会创建额外的非核心线程去执行任务,而是执行拒绝策略. 2、CachedThreadPool 这个线程池叫做缓存线程池, 特点是线程数几
阅读全文
摘要:1、进程和线程的区别 进程是操作系统管理的基本运行单元。360浏览器是一个进程、WPS也是一个进程,正在操作系统中运行的".exe"都可以理解为一个进程 线程是进程中独立运行的子任务就是一个线程。像QQ.exe运行的时候就有很多子任务在运行,比如聊天线程、好友视频线程、下载文件线程等等 2、创建线程
阅读全文