
多线程
文章平均质量分 82
我没有在划水
365^1.01
展开
-
我惊了:你居然认为ReentrantLock是轻量级锁?
目录前言前言前几天面试了好几位小伙伴,在问到关于锁这一块的知识点时,大部分人都会有意无意的提到一个点:ReentrantLock是轻量级锁,相比于synchronized实现更加简单。对于这样的说法,我通常会继续追问以下几个问题:你是从什么角度来判断......原创 2022-03-19 10:36:15 · 5056 阅读 · 5 评论 -
想不到吧,Java创建线程的方式只有一种
目录前言继承Thread方式实现Runnable接口实现callable接口总结前言看到这个标题的小伙伴先别着急喷我……在面试的时候,我们经常会被问到这种基础题:Java创建线程的方式有几种?比较正常的答法当然是三种:继承Thread实现Runnable接口实现callable接口一般来说这种属于送分题,不过大家都是这样答的,好像有点一般般,有没有什么答法能够让面试官眼前一亮呢?当然有!事实上,这个问题可以从两个角度去思考:Java层次操作系统层次大部分人的回答都是从Java原创 2022-03-09 10:47:18 · 5004 阅读 · 0 评论 -
关于while与println的现象,你还在认为是println方法有synchronized修饰吗?
大家好,今天闲聊一下以前困扰过我的一个问题:这段代码的运行结果是啥?public static Integer integer = 0;public static void main(String[] args) throws Exception { new Thread(() -> { while (integer == 0){ } System.out.println("end"); }).start(); Threa原创 2021-12-25 17:18:31 · 2950 阅读 · 0 评论 -
为什么有MESI了还要volatile?你真的了解volatile吗
目录前言二级目录三级目录前言我们先假设这样一个场景:面试官:“小伙子,看你简历写了精通多线程,能说下什么是JMM吗?”你:“JMM就是Java内存模型,这个呢要先从CPU缓存架构说起巴拉巴拉……所以JMM就是为了屏蔽操作系统这些底层细节,为了能够做到一次编译到处运行而实现的一套抽象机制。”面试官:“不错,那volatile知道吗?说下它的原理呗。”你:“前面说了CPU缓存,在多核的情况下为了保证缓存一致性,CPU引入了MESI缓存一致性协议,”二级目录三级目录...原创 2021-08-20 20:43:50 · 4575 阅读 · 8 评论 -
Java AQS unparkSuccessor 方法中for循环为什么是从tail开始而不是head
目录1、前言2、尾部遍历源码3、高并发下入队逻辑3.1 原子性问题3.2 图解流程4、结尾1、前言在AQS多线程竞争下的获取与释放流程中,我们提到过源码中唤醒节点的逻辑是从后尾部往前遍历找到最前的一个处于正常阻塞状态的结点为什么从尾到头遍历?直接从头到尾的遍历形式有什么问题吗?今天我们就来通过源码的形式来理解一下,为什么要这样做。2、尾部遍历源码首先上源码:private void unparkSuccessor(Node node) { //获取wait状态 int ws =原创 2020-10-04 12:00:41 · 4753 阅读 · 26 评论 -
吃透Java并发:一文看懂锁升级流程
目录前言1、轻量级锁前言在对synchronized的轻量级锁、重量级锁介绍中其实已经对该流程有所讲解,不过不够明朗本章将通过图文并茂的形式,让大家真正了解,jdk1.6之后synchronized升级的完整流程1、轻量级锁...原创 2020-09-16 10:57:21 · 822 阅读 · 0 评论