并发编程
文章平均质量分 94
寒山道杳
合抱之木,生於毫末;九層之台,起於累土;千里之行,始於足下。
展开
-
线程池ThreadPoolExecutor底层原理解析
在平常的开发中,线程池是经常有所接触的。当没有使用线程池的时候,执行异步任务就需要使用new创建一个线程来执行任务,在任务完成后线程便直接销毁了,这样的操作是有很大的开销的。而线程池为了解决在大量执行异步任务时,能够提供较好的性能,因为线程池中的线程是可以复用的。且线程池可以控制和管理资源,譬如限制线程的个数、动态新增线程等。Java中的ThreadPoolExecutor中有提供可调参数和可扩展的接口,以此来满足不同场景下的需求,开发人员可以方便的使用Executors中的工厂方法,如:newCach原创 2022-03-25 16:20:53 · 890 阅读 · 0 评论 -
ThreadLocal的使用与源码解析
前言对于ThreadLocal,那是众所周知的,因为在项目中它是常常被使用的,先简单说下平常使用的场景:设置每个线程所需要的独享数据 设置内存中需要的全局变量(譬如拦截其中的用户信息)在ThreadLocal类的注释中,作者给的便是这样的定义,如图:这段注释大体的意思是说(笔者英语极差):ThreadLocal这个类提供了thread-local变量,这些变量与普通变量不同,每个线程可以根据get或者set方法来操作自己独立初始化的变量副本。ThreadLocal 实例通常是类中的 pr原创 2020-11-22 23:04:12 · 200 阅读 · 0 评论 -
关于为什么线程通信的方法wait()、notify()、notifyAll()被定义在Object类里面?而sleep为什么定义在Thread类里面?
导语在面试中经常会被问到多线程的知识,而在这个知识范围内,我们也会被问到关于wait、notify等这些方法。一般基础点的都会问使用的方法,当然这只是初级的问题,那么稍微深点的问题,可能就像我们标题这样:为什么线程通信的方法wait()、notify()、notifyAll()被定义在Object类里面?而sleep定义在Thread类里面?其实这样的问题更多的是体现在程序实际上面,意思就...原创 2020-03-18 18:40:43 · 3527 阅读 · 2 评论 -
关于如何优雅的停止线程等问题
导语原创 2020-03-07 16:37:22 · 329 阅读 · 0 评论 -
关于线程的启动正确姿势
导语在面试中,很多童鞋可能被问到过start方法和run方法的区别,貌似这种问题都被问烂了,笔者貌似也被问过,不记得当初是怎么回答的了,但肯定回答的怎么样。那么对于这样的问题,我们应该怎么回答呢?当然首先肯定要从理论层面说一下,然后从代码层面说一下,但是理论还是要借助于代码实现来衬托的,所以本篇文章大体思路应该是先从代码实现上比较一下,然后对每个方法的基本实现进行一个简单的阐述。注:本篇文...原创 2020-03-05 19:12:18 · 455 阅读 · 0 评论 -
关于创建线程的方式有几种
There are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread. This subclass should override the run method of class Thread. An instance of the subclass can then be allocated and started. For example, a thread原创 2020-03-04 19:57:52 · 1458 阅读 · 0 评论 -
Java并发编程之AQS
一、关于AQS队列同步器 AbstractQueuedSynchronizer 简称AQS,是用来构建锁或其他同步组件的基础框架(ReentrantLock、ReentrantReadWriteLock、Condition、LockSupport等等),它使用了一个int成员变量表示同步的状态,通过内置的FIFO队列来完成资源获取线程的工作,并发包作者(Doug Lea)期望它能够成为实现大部...原创 2019-04-12 10:27:49 · 561 阅读 · 0 评论 -
Java并发编程之synchronized底层实现原理
一、为什么出现synchronized对于程序员而言,不管是在平常的工作中还是面试中,都会经常用到或者被问到synchronized。在多线程并发编程中,synchronized早已是元老级的角色了,很多人都称其为重量级锁,但是随着Java SE 1.6对其进行各种优化之后,便显得不再是那么的重了。也正是因为多线程并发的出现,便产生了线程安全这样的问题,对于线程安全的主要原因如下:...原创 2019-04-09 19:24:26 · 4885 阅读 · 0 评论 -
Java并发编程之ReentrantLock源码解析
一、关于ReetrantLock在上篇文章Java并发编程之AQS中,比较详细的说了一下关于AQS的设计和AQS的代码相关原理。在上篇文章中也说了,AQS是J.U.C的核心,是用来构建锁或其他同步组件的基础框架,这其中就包括了ReentrantLock。由于前面已经详细的说了AQS的原理,在本篇文章中,对于涉及到AQS相关的东西,便会一带而过。ReentrantLock和synchro...原创 2019-04-15 15:20:58 · 388 阅读 · 0 评论