多线程
文章平均质量分 76
疯狂撸代码的奋青
道阻且长,行则将至,行而不辍,未来可期。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
解决InheritableThreadLocal线程池复用线程时,取值错误
解决InheritableThreadLocal线程池复用线程时,取值错误原创 2022-03-22 11:19:15 · 2995 阅读 · 0 评论 -
volatile的底层实现原理
是使用了lock锁汇编指令实现,让副本数据主动刷新主内存数据,从而实现缓存数据一致性问题对于老式的CPU,LOCK执行会阻塞CPU读取共享变量,对于新式的CPU会采用MESI协议CPU 中的 MESI 缓存一致性协议MESI分别代表缓存行数据所处的四种状态(使用额外的两位(bit)表示),通过对这四种状态的切换,来达到对缓存数据进行管理的目的:状态描述监听M 修改(Modify)该缓存行有效,数据被修改了,和内存中的数据不一致,数据只存在于本缓存行中缓存行必须时刻监听所有.原创 2021-12-15 11:52:44 · 721 阅读 · 0 评论 -
Java内存模型(Java Memory Model,JMM)
定义JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。JMM模型下的线程间通信lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占状态。unlock(解锁):作用于主内存原创 2021-12-14 11:12:01 · 790 阅读 · 0 评论 -
Java中CAS操作
一个线程获取值为a,另一个线程将数值由a改成了b,接着又改成了a,此时线程b的CAS操作认为是没有变化,但其实已经变化过了,这种过程就叫ABA问题。原创 2022-03-29 16:08:41 · 2182 阅读 · 0 评论 -
4种常用线程池介绍
文章目录一. 线程池简介线程池的概念:线程池的工作机制使用线程池的原因:二. 四种常见的线程池详解线程池的返回值ExecutorService简介:具体的4种常用的线程池实现如下:(返回值都是ExecutorService)Executors.newCacheThreadPool()Executors.newFixedThreadPool(int n)Executors.newScheduledThreadPool(int n)Executors.newSingleThreadExecutor()!!核心线转载 2021-12-01 15:19:05 · 723 阅读 · 0 评论 -
synchronized关键字的底层原理
synchronized 底层实现原理synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。在 Java 6 之前,monitor 的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作,性能也很低。但在 Java 6 的时候,Java 虚拟机 对此进行了大刀阔斧地改进,提供了三种不同的 monitor 实现,也就是常说的三种不同的锁:偏向锁(Biased Locki原创 2021-10-14 11:50:08 · 178 阅读 · 0 评论 -
AtomicInteger底层实现原理
典型回答AtomicInteger是对int类型的一个封装,提供原子性的访问和更新操作,其原子性操作的实现是基于CAS(compare-and-swap)技术。所谓CAS,表现为一组指令,当利用CAS执行试图进行一些更新操作时。会首先比较当前数值,如果数值未变,代表没有其它线程进行并发修改,则成功更新。如果数值改变,则可能出现不同的选择,要么进行重试,要么就返回是否成功。也就是所谓的“乐观锁”。从AtomicInteger的内部属性可以看出,它依赖于Unsafe提供的一些底层能力,进行底层操作;以vo转载 2021-10-14 11:14:03 · 574 阅读 · 0 评论 -
多线程-countDownLatch
转:https://www.jianshu.com/p/e233bb37d2e6实际案例:public class CountDownLatchTest { public static void main(String[] args) { final CountDownLatch latch = new CountDownLatch(2); System.out.println("主线程开始执行…… ……"); //第一个子线程执行转载 2021-05-10 13:16:55 · 144 阅读 · 0 评论 -
AQS CAS简单详解
可参考:https://blog.youkuaiyun.com/zcw4237256/article/details/78552741FIFO等待队列的阻塞锁(额外)文章目录CAS(Compare And Swap)什么是CASCAS典型应用AQS(AbstractQueuedSynchronizer)什么是AQSAQS用法CAS(Compare And Swap)什么是CASCAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三转载 2021-05-11 08:58:51 · 244 阅读 · 0 评论 -
Java中的Unsafe
https://www.jianshu.com/p/db8dce09232d文章目录获取Unsafe主要功能普通读写volatile读写有序写入直接内存操作CAS相关偏移量相关线程调度类加载Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力。Unsafe类,全限定名是sun.misc.Unsafe,从名字中我们可以看出来这个类对普通程序员来说是“危险”的,一般应用转载 2021-05-11 08:58:40 · 237 阅读 · 0 评论
分享