
并发编程
文章平均质量分 93
溪.源
夫学须静也,才须学也;非学无以广才,非志无以成学。
展开
-
【Java线程】线程安全三元素:原子性、可见性、有序性
目录定义原子性AtomicXxxAtomicStampedReference可见性有序性参考资料定义首先大家需要思考一下何为线程安全性呢???《Java并发编程实战》书中给出定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步,这个类都能表现出正确的行为,那么这个类就是线程安全的。对于线程安全性主要从以下几个方面出发:原子性、有序性、可见性。原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作;例如:atomicXXX原创 2021-03-06 20:11:23 · 11535 阅读 · 14 评论 -
【多线程】线程状态和创建方式
目录线程状态线程创建方式继承Thread和实现Runnable接口创建线程方式Callable接口创建线程线程池创建线程线程状态线程共存在5种状态:新建、就绪、运行、阻塞、死亡,如下图:解释说明各个状态:1、新建状态(New):新创建一个线程对象;2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()的方法。 该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权;3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码;4原创 2021-02-24 20:57:06 · 1564 阅读 · 0 评论 -
【Java线程】复盘线程池使用及思考
系统开发过程中遇到了线程池的使用,这篇文章主要记录一下线程池使用过程中遇到的问题和思考。自定义线程池自定义线程池对于如何自定义线程池以及参数设置,请移步溪源《“打工人”初识线程池及自定义线程池实战》注入Spring容器中为什么要放入Spring容器中呢???思考如果不放入容器中,会存在什么问题。—资源浪费。如果不放入容器中,每次执行任务时都会创建线程池,执行完任务再关闭线程池。如果任务请求次数很多,便会创建很多线程池,岂不是造成很大的资源浪费,故将其放入容器中管理。示例: @原创 2021-02-24 20:50:39 · 1433 阅读 · 1 评论 -
【Java线程】深入理解Volatile关键字和使用
目录背景volatile原理volatile特性可见性有序性原子性使用场景背景理解volatile底层原理之前,首先介绍关于缓存一致性协议的知识。背景:计算机在执行程序时,每条指令都是由CPU调度执行的。CPU执行计算指令时,产生与内存(物理内存)通讯的过程(即数据的读取和写入),由于CPU执行速度很快,而从内存读取数据和内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存(Cache原创 2020-12-19 16:31:24 · 2982 阅读 · 5 评论 -
【Java线程】“打工人”初识线程池及自定义线程池实战
目录理论原理线程池创建工作流程图拒绝策略参数设置四种线程池实战理论聊一下为什么要使用线程池?程序的运行本质,就是通过使用系统资源(CPU、内存、网络、磁盘等等)来完成信息的处理,比如在JVM中创建一个对象实例需要消耗CPU的和内存资源,如果你的程序需要频繁创建大量的对象,并且这些对象的存活时间短就意味着需要进行频繁销毁,那么很有可能这段代码就成为了性能的瓶颈。总结下来其实就以下几点。复用相同的资源,减少浪费,减少新建和销毁的成本;减少单独管理的成本,统一交由线程池管理;提高系统响应速度,因为线原创 2020-11-10 22:41:31 · 2805 阅读 · 0 评论