首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Java线程】“打工人”初识线程自定义线程实战

理论 聊一下为什么要使用线程?...在Java中万物皆对象,那么线程也是一个对象,Java线程是对于操作系统线程的封装,创建Java线程也需要消耗操作系统的资源,因此就有了线程。 原理 线程创建 首先了解一下线程创建以及工作原理。...*/ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { } } 除了以上四种拒绝策略,Java还支持自定义拒绝策略...线程的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程会补充一个新线程。 ? newSingleThreadExecutor 创建一个单线程线程。...taskMap = new LinkedHashMap(); idList.forEach(e -> taskMap.put(e, Boolean.FALSE)); //自定义线程

58940
您找到你想要的搜索结果了吗?
是的
没有找到

Java线程实现原理之自定义线程(一)

线程好处: 1.降低资源 => 重复利用机制 (降低创建线程和销毁线程) 2.提高响应效率 => 当任务到达时,任务可以不需要等待去创建线程就可以执行 3.方便管理...使用线程可以统一分配、调优、监控。 线程与任务的区别: 可以把线程理解成一个工作人员。而任务就是这个工作人员干的活。比如,餐厅的工作人员在为顾客传菜,传菜就是个任务。...一个任务可以是读取数据库中的一条记录, 也可以是FTP传输一批文件,FTP传输一个文件…… 1 //创建线程四种方式: 2 //1.可缓存线程,如果线程长度超过处理需要,可灵活回收空闲线程...3 //2.定长线程,可控制线程最大并发数,超出的线程会在队列中等待。 4 //3.可定时线程,支持定时及周期性任务执行。...5 //4.单例线程,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

4.1K20

【Java 并发编程】线程机制 ( 线程阻塞队列 | 线程拒绝策略 | 使用 ThreadPoolExecutor 自定义线程参数 )

文章目录 一、线程阻塞队列 二、拒绝策略 三、使用 ThreadPoolExecutor 自定义线程参数 一、线程阻塞队列 ---- 线程阻塞队列是线程创建的第 5 个参数 : BlockingQueue...int maximumPoolSize, // 最大线程数 , 线程能创建的最大线程数量 long keepAliveTime,...: 有优先级的阻塞队列 ; 阻塞队列吞吐量 : SynchronousQueue > LinkedBlockingQueue > ArrayBlockingQueue ; 二、拒绝策略 ---- 线程拒绝策略是线程创建的第...final RejectedExecutionHandler defaultHandler = new AbortPolicy(); 三、使用 ThreadPoolExecutor 自定义线程参数...---- 创建 1 个线程 , 核心线程数是 2 , 最大线程数是 3 , 则非核心线程 0 ~ 1 个 , 非核心线程最大空闲存活时间 60 秒 , 阻塞队列最大存放 10 个元素 ,

1.6K10

@Async应用自定义线程

@Async应用自定义线程 自定义线程,可对系统中线程更加细粒度的控制,方便调整线程大小配置,线程执行异常控制和处理。...在设置系统自定义线程代替默认线程时,虽可通过多种模式设置,但替换默认线程最终产生的线程有且只能设置一个(不能设置多个类继承AsyncConfigurer)。...自定义线程有如下模式: 重新实现接口AsyncConfigurer; 继承AsyncConfigurerSupport; 配置由自定义的TaskExecutor替代内置的任务执行器。...所以可以在项目中,定义名称为TaskExecutor的bean生成一个默认线程。也可不指定线程的名称,申明一个线程,本身底层是基于TaskExecutor.class便可。...@Async注解,使用系统默认或者自定义线程(代替默认线程)。

2.4K00

(六)ThreadPoolExecutor自定义线程

上一篇中提到四种线程的创建方式,最后还是会 new ThreadPoolExecutor(),所以 我们可以使用 new ThreadPoolExecutor()的方法创建自定义线程。...,而不是使用默认的4中线程策略: 【强制】线程不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程的运行规则,规避资源耗尽的风险...shutdownNow():立即终止线程,并尝试打断正在执行的任务,并且清空任务缓存队列,返回尚未执行的任务 线程容量的动态调整 ThreadPoolExecutor提供了动态调整线程容量大小的方法...:setCorePoolSize()和setMaximumPoolSize() setCorePoolSize:设置核心大小 setMaximumPoolSize:设置线程最大能创建的线程数目大小...int maxPoolSize = 5; //线程维护线程的最大数量 long keepAliveTime = 1; //线程维护线程所允许的空闲时间(解释:当线程的数量超过

2.8K10

【Android 异步操作】线程 ( 线程使用示例 | 自定义线程使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )

文章目录 一、自定义线程使用流程 二、自定义任务拒绝处理策略 三、完整代码示例 在博客 【Android 异步操作】线程 ( 线程简介 | 线程初始化方法 | 线程种类 | AsyncTask...使用线程示例 ) 中 , 简单介绍了 线程 , 以及 Java 提供的四个基本线程 , 线程的 基本工作机制 , 如核心线程 , 非核心线程 等 ; 在博客 【Android 异步操作】线程...一、自定义线程使用流程 ---- 1 ....初始化线程 : 调用 ThreadPoolExecutor 的 构造函数 初始化线程 , 并对线程进行配置 , 配置内容包括如下内容 : 核心线程数 最大线程数 非核心线程最大限制时间 闲置时间的时间单位...java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class ThreadPool { /* 自定义线程使用示例

49400

java基础|自定义java线程

线程创建的参数 在创建线程的各种方式中我们有讲到过通过创建线程来完成异步操作,但实际上jdk提供的Executors来创建线程都还有些缺陷,线程有以下几个参数: 代码节选自源码ThreadPoolExecutor.java...可以自定义名字等等 handler:在线程和队列满的时候,如何处理新到来的任务 jdk自带线程的缺陷 自带的线程主要是通过Executors来初始化. newCachedThreadPool 通过...TimeUnit.MILLISECONDS, new LinkedBlockingQueue()); } 自定义线程...通过对自带的线程的分析,我们知道自定义线程主要是对池子的最大数量和等待队列的最大数量做好限制,当然还有自定义的失败策略(以后单写个DEMO讲)代码如下: /** * @author https...,在小型开发中使用系统自带的线程是没问题的,但有时候在生产环境中,特别是同步一些东西的时候,量级比较大,这时候使用系统自带的线程难免会有些问题,这时候就需要自定义线程了,加油吧,少年!

1.3K21

线程-线程的好处

1.线程的好处。 线程使应用能够更加充分合理的协调利用cpu 、内存、网络、i/o等系统资源。 线程的创建需要开辟虚拟机栈,本地方法栈、程序计数器等线程私有的内存空间。...所以需要通过线程协调多个线程,并实现类似主次线程隔离、定时执行、周期执行等任务。线程的作用包括: 利用线程管理并复用线程、控制最大并发数等。 实现任务线程队列缓存策略和拒绝机制。...隔离线程环境。比如,交易服务和搜索服务在同一台服务器上,分别开启两个线程,交易线程的资源消耗明显要大;因此,通过配置独立的线程,将较慢的交易服务与搜索服务隔开,避免个服务线程互相影响。...在了解线程的基本作用后,我们学习一下线程是如何创建线程的。...如果等于0,则任务执行完成后,没有任何请求进入时销毁线程线程;如果大于0,即使本地任务执行完毕,核心线程也不会被销毁。

1.3K11

自定义线程理论知识部分

一、线程是什么 线程是一种基于化思想管理线程的工具。 创建/销毁是一个耗时操作,频繁使用会降低整体性能,使用线程维护多个线程,可有效降低运行中性能开销,以及更好的管理线程。...Java中自定义线程是自JDK1.5后出现的ThreadPoolExecutor。...线程生命周期 ThreadPoolExecutor几个重要参数: corePoolSize:线程的基本大小,即在没有任务需要执行的时候线程的大小,并且只有在工作队列满了的情况下才会创建超出这个数量的线程...线程生命周期是由内部隐式维护,线程的运行状态(runState)和有效线程数量(workerCount)关乎线程的运行状态。...任务拒绝 作用是保护线程,任务队列已满、线程池中的线程数据达到maximumPoolSize时(线程最大容量)会使用拒绝策略。

62130

实战 | 线程的几种自定义扩展

下图为线程的构造方法,我们可以自定义一些功能实现项目优化 1、预先启动核心线程 this.prestartAllCoreThreads(); 使用方式:自定义线程的构造方法中调用 作用:当真正任务被执行时...,可以减少创建线程带来的性能损耗 2、自定义线程线程工厂 官方提供的默认线程工厂为Executors.defaultThreadFactory(); 我们可以仿照进行自定义扩展线程工厂,增加一些个性化功能...如下图所示,我们自定义线程线程工厂时可以附加很多功能。...4.2、根据线程本身提供的钩子,进行自定义扩展 4.2.1、执行每个任务的监控 线程线程通过runWorker方法执行每个任务时,前后都提供了空方法,供自定义扩展。...5.1、线程提供了线程数、空闲时间等信息的set方法 5.2、自定义可修改大小的队列 修改队列的方式可以查看上期文章:动态修改线程队列大小 6、自定义关闭线程 RunTime.getRunTime

66130

【Android 异步操作】线程 ( 线程作用 | 线程种类 | 线程工作机制 | 线程任务调度源码解析 )

文章目录 一、线程作用 二、线程种类 三、线程工作机制 四、线程任务调度源码解析 一、线程作用 ---- 线程作用 : ① 避免创建线程 : 避免每次使用线程时 , 都需要 创建线程对象 ;...---- 线程种类 : ① newCachedThreadPool : 可缓存线程 , 如果 线程线程个数已满 , 回收空闲线程 , 如果没有空闲线程 , 此时会创建新线程 ; ② newFixedThreadPool...后到的后执行 ) , LIFO 后入先出 ( 后到的先执行 ) ; 三、线程工作机制 ---- 线程线程相关概念: 线程数 : 线程的 有 最大线程数 MaxSzie , 核心线程数 CoreSize..., 任务拒绝后 , 处理善后 ; 四、线程任务调度源码解析 ---- 在 AsyncTask.java 中 , 在静态代码块中 , 自己 自定义创建了线程 , 没有使用上述四种线程 ; 创建线程时传入的参数...class AsyncTask { static { /** * 自定义线程 :

91800
领券