首页 > 其他分享 >面试~线程池-三大方法、七个参数、四种拒绝策略、实际应用

面试~线程池-三大方法、七个参数、四种拒绝策略、实际应用

时间:2022-09-06 09:35:51浏览次数:86  
标签:短信 验证码 面试 任务 线程 new 三大 ThreadPoolExecutor


池化技术

程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术

线程池、连接池、内存池、对象池///..... 创建、销毁。十分浪费资源


池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。


线程池的好处:

1、降低资源的消耗 2、提高响应的速度 3、方便管理。

线程复用、可以控制最大并发数、管理线程



★ 总结Java线程池的基本工作原理/线程池的执行流程:

image

  • 以上是考虑到满了的情况,当然这个过程是动态的,核心线程中执行完任务,就可以到任务队列拿任务去执行,任务队列空了,新提交的任务也可以放到任务队列中去。



三大方法

  • 创建单个线程、创建固定线程数量的、具有缓存作用的
ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程
ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一个固定的线程池的大小
ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩的,遇强则强,遇弱则弱



七个参数

public ThreadPoolExecutor(int corePoolSize, //核心线程池大小
						int maximumPoolSize, //最大核心线程池大小
						long keepAliveTime, //超时了没有人调用就会释放
						TimeUnit unit, //超时单位
						BlockingQueue<Runnable> workQueue, //阻塞队列
						ThreadFactory threadFactory, //线程工厂:创建线程的,一般不用动
						RejectedExecutionHandler handle //拒绝策略
) 



四种拒绝策略

 new ThreadPoolExecutor.AbortPolicy() //默认策略,抛出异常
 new ThreadPoolExecutor.CallerRunsPolicy() // 哪来的去哪里!将此任务交给调用者直接执行
 new ThreadPoolExecutor.DiscardPolicy() //不做任何操作
 new ThreadPoolExecutor.DiscardOldestPolicy() //丢弃队列中最老的任务,然后再执行该任务



池的最大的大小如何去设置!

了解:IO密集型,CPU密集型:(调优)

1、CPU 密集型,几核,就是几,可以保持CPu的效率最高!

2、IO 密集型 > 判断你程序中十分耗IO的线程, // 程序 15个大型任务 io十分占用资源!那么就设置为它的两倍,设置为30

 // 获取CPU的核数 
System.out.println(Runtime.getRuntime().availableProcessors());



线程池的应用

1、发短信业务

在登录界面,使用手机号+验证码登录

特点:主业务和短信业务可以割裂开来。

当我们点击验证码的时候,连接短信业务平台发送短信,但是发送短信的业务会受到平台的影响,会有一定的延时。

我们使用线程池,就可以不用等到短信平台返回验证码之后再给用户返回。

我们先提示用户验证码获取成功,然后把短信业务放到另外一个线程中执行,使用线程池管理短信线程。

具体过程是:生成验证码,然后 调用线程池中的自定义的“短信线程”,调用短信平台,发送验证码;然后把验证码放入redis



2、多线程下载器

将需要下载的资源分块,然后开启多个线程,每个线程负责一块资源的下载。



3、还有我的博客项目也是运用了线程池

自定义一个线程来处理更新阅读浏览量,然后放到线程池进行管理。

标签:短信,验证码,面试,任务,线程,new,三大,ThreadPoolExecutor
From: https://www.cnblogs.com/shan333/p/16660601.html

相关文章

  • 面试java并发~(lock、volatile、cas)
    Lock锁是一个接口,有三个实现类,分别是常用的可重入锁,读锁、写锁。常用的可重入锁,默认一般创建的是非公平锁,就是允许线程插队,而不是按先来后到顺序。非公平锁的目的:是为......
  • linux线程同步简单示例
    #include<stdio.h>#include<pthread.h>#include<stdlib.h>//intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),v......
  • Vue-面试题之生命周期函数
    1.什么是生命周期函数?vue组件对象在创建到销毁的过程中,在某一种条件成立的时刻系统会去调用的vue中设定的函数这些函数都叫做:生命周期函数2.vue的命周期函数......
  • 三大范式
    三大范式为什么需要数据规范化信息重复更新异常插入异常无法正常显示信息删除异常丢失有效的信息三大范式(了解)第一范式(1NF)原子性:保证每......
  • Java---线程入门
    前置知识什么是进程,什么又是线程?咱不是讲系统,简单说下,知道个大概就好了。进程:一个可执行文件执行的过程。线程:操作系统能够进行运算调度的最小单位。它被包含在进程之......
  • JAVA线程
    01、基本概念:程序、进程、线程程序(program):为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process):程序的一次执行过程,或是正在运行......
  • 面试突击80:说一下 Spring 中 Bean 的生命周期?
    Java中的公共类称之为Bean或JavaBean,而Spring中的Bean指的是将对象的生命周期,交个SpringIoC容器来管理的对象。所以Spring中的Bean对象在使用时,无需通过n......
  • 线程
    1、什么是线程?进程?两者区别?线程:是操作系统能够进⾏运算调度的最⼩单位,由进程创建的,是进程的一个实体,线程也可以创建线程;进程:正在运行的一个程序,一个进程可以拥有多个线......
  • 前端面试Ajxa常见问题整理
    1、Ajxa的交互流程有哪几步?(1)创建Ajxa对象xhr=newXMLHttpRequest(2)规定请求地址xhr.open(method,url,async)(3)等待服务器相应xhr.onload(4)向服务器发送请求xhr.send......
  • 三大范式
    文章目录前言一、三大范式1.第一范式(1NF)2.第二范式(2NF)3.第三范式(3NF)二、五大约束二、关于范式的一些其他了解前言本篇文章主要给大家详细解释三大范式以及在面试时如果面试......