
并发
AvengerEug
向技术致敬的码农
展开
-
并发系列五:基于两种案例来认识ReentrantLock源码解锁过程(公平锁)
前言上篇文章咱们基于两个案例了解了ReentrantLock(公平锁)的加锁过程。接下来咱们继续基于相同的案例来认识它的解锁过程。两个案例1.线程A单独加锁再解锁2.线程A正在持有锁的过程中,线程t1来加锁,线程t1阻塞后,线程A解锁一、案例1:线程A单独加锁再解锁还是使用相同的代码:public class SimpleThreadLock { static ReentrantLock lock = new ReentrantLock(true); public原创 2020-06-23 19:45:48 · 333 阅读 · 0 评论 -
并发系列四:基于两种案例来认识ReentrantLock源码加锁过程(公平锁)
前言上篇文章咱们证明了synchronized关键字的特性:无锁、偏向锁、轻量锁、重(chong)偏向、重(chong)轻量、重量锁。可以说synchronized是jvm层面实现同步的方式。在jdk中,存在一个叫java.util.concurrent的包,简称JUC,它是一个jdk层面的并发包,里面存在了大量与并发编程相关的api,其中最代表意义的就是atomic和lock两种类别,前者是基于乐观锁CAS(Compare And Swap)的实现,后者是基于AQS(Abstract Queued S原创 2020-06-09 23:34:06 · 326 阅读 · 0 评论 -
并发系列三:证明分代年龄、无锁、偏向锁、轻量锁、重(chong)偏向、重(chong)轻量、重量锁
前言[上篇文章]咱们了解了synchronized关键字的常见用法、对象头以及证明了一个对象在无锁状态下的对象头markwork部分的前56位存储的是hashcode。接下来,咱们继续来根据对象头分别证明分代年龄为什么是15、无锁、偏向锁、轻量锁、重(chong)偏向、重(chong)轻量、重量锁,这些锁是真实存在的,咱们可以通过代码来重现。废话不多说,咱们一一来证明一、证明分代年龄为什么为15大家都知道,在jvm中,若一个对象在survivor区经过了15次的young gc。当再进行一次yo原创 2020-05-31 20:13:03 · 995 阅读 · 1 评论 -
并发系列二:synchronized关键字常见api、对象头及证明hashcode
前言上篇文章总结了java线程与os线程的联系,以及模拟java调用os函数创建线程。通过上篇文章的总结,咱们了解了java的线程与os线程是一一对等的。同时也了解到了使用多线程的原因。凡事都有利与弊,在多线程提升程序运行效率的优点下,也带来了另外的问题——同步。没错,只要使用到多线程,咱们就要考虑同步,不然就乱套了!在同步问题中,java有一个亲儿子——synchronized关键字。在jdk 1.5后,它就有了一些孪生兄弟 ——JUC包下的各种锁实现。它们之间的特点将在后续的文章中做出总结。一、原创 2020-05-28 21:43:58 · 551 阅读 · 0 评论 -
并发系列一:初识java线程与os的关系,模拟java调用os函数创建线程
前言并发,这是一个值得深思的话题。它似无形却有形。我们平常的工作都是面向业务编程,CRUD居多,基本上与并发没什么交集。ok,并发是一个广泛的概念。那么咱们来聊聊多线程(java 多线程)。这里咱们来思考下问题:为什么要使用多线程?俗话说,一方有难八方支援。在今年的疫情初期,武汉的疫情非常严峻,如果仅靠武汉的白衣天使来医治病患,这无疑是一个长征项目,这就等同于单线程在干活。于是一批批来自于五湖四海的白衣天使前往武汉进行支援(点赞!),此时就是多线程在协同工作。是的,你没想错,使用多线程的就是为了加快程序原创 2020-05-27 19:49:32 · 626 阅读 · 0 评论