多线程
小白马zzz
养老型菜比Java工程师
展开
-
窥探CAS
到此为止,我们已经从应用层到CPU指令看到了一个基于CAS的完整demo,相信你也对CAS有了一些理解,本篇文章只能带你浅浅窥探一下CAS的基本概念和原理,激起你对知识的渴望,想深入了解还需要我们自身实践以及了解更多的资料。addAndGet方法调用了Unsafe(Java 不能直接访问操作系统底层,而是通过本地方法来访问,Unsafe类提供了硬件级别的原子操作)中的getAndAddInt方法。简单介绍了三种锁,其中提到自旋锁的实现是通过CAS来实现的,今天就来浅浅的窥探一下CAS的实现原理。原创 2023-03-16 08:30:00 · 73 阅读 · 0 评论 -
简述Sychronized的偏向锁、轻量级锁、重量级锁
线程在获取锁的过程中,不会去阻塞线程,也就没有所谓的唤醒线程,阻塞和唤醒这两个步骤都是需要通过操作系统去进行实现的,比较消耗时间。自旋锁是通过CAS来获取预期的一个标记,如果没有获取到则继续获取,直到获取到时则结束自旋,这个过程中线程一直在运行中,相对而言并没有占用太多操作系统资源,比较轻量。当一个线程获取到锁后,此时这把锁是偏向锁,如果有第二个线程来竞争锁,那么偏向锁会升级为轻量级锁,通过自旋来实现,不会阻塞线程。如果轻量级锁自旋次数过多且仍未获取到锁,则升级为重量级锁,重量级锁会阻塞线程。原创 2023-03-15 21:29:08 · 120 阅读 · 1 评论