线程安全——线程池核心——Executors线程工厂类

线程池核心概述

Executors工厂类使用						
Executors工厂类底层源码分析详解				
ThreadPoolExecutor自定义线程池				
ThreadPoolExecutor拒绝策略详解				
计算机密集型与IO密集型详解			
如何正确的使用线程池

 线程池

        一说到这个词,大家很容易想到高并发等等各种脑补的场景。高并发其实是一个非常抽象的概念,要实现高并发其实不仅仅是一个JAVA 线程集合类、或者JAVA基础层面就能搞定的事情,在互联网大厂中,高并发其实涉及方方面面,从前端到后端,到支持高并发的中间组件,最后到数据存储,持久化层面等等,都需要对高并发做一些考量和设计,这也是我们后面专门开设高并发全面深入集训营的目标,就是为了让同学们全面的、系统的、深入的去学习高并发这门高深的技术栈!

线程池的作用,这是一道简单的初级面试题,可以从几个角度去回答说明:
    管理控制:首先,从管理角度就是为了更好的控制线程,使用线程池来帮助我们去管
理线程,使得我们对线程的生命周期、初始化、运行状态、销毁等各个环节有一个把控。
    系统资源:另外一点,从系统资源的角度考虑,线程池可以控制线程的数量,根据任务
的多少去对线程池中的线程个数进行添加或者减少,可以回收空闲状态的线程,减少线
程的频繁初始化和销毁,避免不必要的系统开销,节省系统资源,保障稳定性!
    应用性能:从性能的角度去考虑,线程池可以配合高并发容器的设置,对任务和工作项
进行缓存,异步的多线程的去处理任务,从而提高应用服务的吞吐率、消费性能,也从而提
高单个线程的利用率。
    兜底策略:从健壮性的角度去分析,线程池提供了很多拒绝策略,我们在任务过多或者处理
不过来的时候,可以进行有效的拒绝策略、降级方案,以补偿的形式进行处理任务,避免因
为线程池的问题对系统产生较为严重的影响。
当然如何使用好线程池,也是需要一些实际的经验,稍后会给大家一一道来!

Executors

为了更好的控制多线程,JDK提供了一套线程框架Executors,帮助开发人员有效地进
行线程控制。它们都在java.util.concurrent包中,是JDK并发包的核心。
Executors,他扮演这线程工厂的角色,我们通过Executors可以创建特定功能的线程池。

Executors创建线程池方法: 

Executors创建线程池方法:
    newFixedThreadPool()方法:该方法返回一个固定数量的线程池,该方法的线程数始终
不变,当有一个任务提交时,若线程池中空闲,则立即执行,若没有,则会被暂缓在一个
任务队列中等待有空闲的线程去执行。
    newSingleThreadExecutor ()方法:创建一个线程的线程池,若空闲则执行,若没有空
闲线程则暂缓在任务列队中。
    newCachedThreadPool()方法:返回一个可根据实际情况调整线程个数的线程池,不限制
最大线程数量,若有任务,则创建线程,若无任务则不创建线程。如果没有任务则线程在
60s后自动回收(空闲时间60s)。
    newScheduledThreadPool()方法:该方法返回一个SchededExecutorService对象,但
该线程池可以指定线程的数量。

代码:

//4 创建一个带有定时机制的线程池
ScheduledExecutorService executorService4 = Executors.newScheduledThreadPool(1);

executorService4.scheduleWithFixedDelay(new Task(1), 5, 2, TimeUnit.SECONDS);//延迟
//五秒后每两秒执行一次

 

package com.bfxy.thread.core.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class UseExecutors {

	
	public static void main(String[] args) {
		
		//1 创建固定数量的线程池
		ExecutorService executorService1 = Executors.newFixedThreadPool(5);
		
		//2 单线程的线程池
		ExecutorService executorService2 = Executors.newSingleThreadExecutor();
		
		//3 创建一个没有容量限制的线程池
		ExecutorService executorService3 = Executors.newCachedThreadPool();
		
		//4 创建一个带有定时机制的线程池
		ScheduledExecutorService executorService4 = Executors.newScheduledThreadPool(1);
		
		executorService4.scheduleWithFixedDelay(new Task(1), 5, 2, TimeUnit.SECONDS);
		
		
		
		
	}
	
}

task执行类:

package com.bfxy.thread.core.pool;

public class Task implements Runnable {

	private int taskId;
	
	public Task(int taskId) {
		this.taskId = taskId;
	}

	public int getTaskId() {
		return taskId;
	}

	public void setTaskId(int taskId) {
		this.taskId = taskId;
	}

	@Override
	public void run() {
		System.err.println("run task id : " + this.taskId);
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public String toString(){
		return "当前线程DI: " + this.taskId;
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据引用和引用提供的信息,线程池核心线程参数合理取值可以通过Executors工厂来创建一些常用的线程池。在Executors中,有多个静态工厂方法可以用来创建不同型的线程池。其中一个常用的方法是newFixedThreadPool,它可以创建一个具有固定线程数的线程池。这个固定的线程数就是线程池核心线程数。 在使用newFixedThreadPool方法创建线程池时,可以根据实际情况来选择合适的核心线程数。如果任务量较大,或者需要快速响应,可以选择较大的核心线程数。如果任务量较小,或者资源受限,可以选择较小的核心线程数。 需要注意的是,核心线程数的取值应该合理平衡资源利用率和响应速度。如果核心线程数过多,可能会导致资源浪费。而如果核心线程数过少,可能会导致任务排队等待,影响响应速度。 综上所述,线程池核心线程参数合理取值应该根据实际情况来选择,平衡资源利用率和响应速度的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [线程池线程状态](https://blog.csdn.net/Peng_zhj/article/details/122102528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [java线程池创建线程过程及使用建议](https://blog.csdn.net/qq_28227405/article/details/125753589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

择业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值