Java 多线程:彻底搞懂线程池 |
您所在的位置:网站首页 › java多线程可以采用什么接口方式实现 › Java 多线程:彻底搞懂线程池 |
大家好,又见面了,我是你们的朋友全栈君。 熟悉 Java 多线程编程的同学都知道,当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了。 目录 1 线程池的优势 2 线程池的使用 3 线程池的工作原理 4 线程池的参数 4.1 任务队列(workQueue) 4.2 线程工厂(threadFactory) 4.3 拒绝策略(handler) 5 功能线程池 5.1 定长线程池(FixedThreadPool) 5.2 定时线程池(ScheduledThreadPool ) 5.3 可缓存线程池(CachedThreadPool) 5.4 单线程化线程池(SingleThreadExecutor) 5.5 对比 6 总结 参考 1 线程池的优势总体来说,线程池有如下的优势: (1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 (2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 (3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 2 线程池的使用线程池的真正实现类是 ThreadPoolExecutor,其构造方法有如下4种: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, defaultHandler); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), handler); } public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |