就该这么学并发
文章平均质量分 91
java并发编程那些事, 从底层开始,一步一步学习进阶,明白原理, 掌握源码, 岂不快哉!
码哥说
路漫漫其修远兮
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
13. 大佬问我: notify()会立刻释放锁么?
大佬问我: notify()会立刻释放锁么? 我的内心戏: 肯定会啊! 这么简单的问题? 聪明如我, 决定装小白, 回答: 不会? 大佬: 很好, 小伙子基础不错! 我: 大佬: 说说为什么 我: ……………… 于是, 有了这篇文章! 问题的根本原来在于 “立刻”这个描述词! 如果你和咸鱼君一样懵逼, 不妨往下看! 技术大佬可以告辞了!! 接下来, 我们深入的分析分析wait和notify 前言 前面介绍了Synchronized关键词的原理与优原创 2020-10-19 15:46:55 · 1504 阅读 · 2 评论 -
12. 面试官不问, 你也不得不知道的锁知识!
前言 hello, 大家好, 我是咸鱼君, 擅长各种Java摸鱼姿势. 恰逢2020年“金九”月, 今天, 我们就来说一说面试中出现频率极高的锁知识! ps:说不定可以帮到部分有“想法”的同学 锁的优化 JDK6开始, synchronized的实现机制进行了较大调整,除了使用JDK5引进的CAS自旋之外, 还增加了以下的优化策略. 自适应的CAS自旋 锁消除 锁粗化 偏向锁 轻量级锁 … 这些优化使得synchronized性能获得了极大提高, 所以, 情况允许下, 推荐使用synchronize原创 2020-09-25 09:44:13 · 325 阅读 · 0 评论 -
11. 嗨, 需要谈个对象…………?
嗨, 空闲时间, 谈个对象…………头? 对不起, 咸鱼君又调皮了. 今天, 我要和你谈的不是对象, 而是对象头. 没错, 就是Java对象里的对象头知识. (专业技术文, 阅读需谨慎) 前言 上章我们说了synchronized的基本原理, 了解到了synchronized的三种加锁方式 方法锁 类锁 对象锁 抱着往底层深挖的心态, 本章继续深入了解synchronized, 看看在底层, synchronized锁究竟是怎么实现的! 为了说清synchronized锁的底层原理,我们得先原创 2020-09-15 09:52:23 · 287 阅读 · 0 评论 -
10. 谁再和我提内核/用户态, 我跟谁…………
前言 谁再和我提内核/用户态, 我跟谁…… 记不清哪天了, 咸鱼刚入职场, 依稀记得某天的下午时光, 公司内的一群大牛, 聚在一起 尽讨论一些高大上的技术话题, 或底层原理, 或架构…… 时不时传来一些专业术语“用户态”,“内核态”………… 咸鱼在边上默默听着, 也不敢插嘴, 只能仰望大佬, 同时暗下决心, 今天一定要把这两个概念搞懂! 那么, 用户态和内核态代表究竟是个啥? 用户态和内核态 简而言之原创 2020-09-01 13:45:14 · 246 阅读 · 0 评论 -
09. 小伙子, 听说你对synchronized理解很深?...
大佬: 你这段代码有线程安全问题, 解决下! 我: …… 大佬: Synchronized加上, 别锁方法, 锁必要的代码块就好, 这样性能高点. 我: 哦, 好的…………(ps, 迅速百度……) 前言 Synchronized(也叫同步)是原创 2020-08-14 17:11:27 · 248 阅读 · 0 评论 -
08. 今天, 小姐姐突然问了我一个问题……
前言 今天, 妹子突然找我, 问了我一个问题…… 她要买笔记本电脑 (突然的失望……) 她不是小白, 知道电脑要看内存, CPU,显卡以及固态硬盘等等 甚至知道 N卡 和 A卡的区别 但是依旧被CPU的 “i5处理器 双核四线程” “i5处理器 双核双线程” …… 这些描述给整懵了… 妹子知道我是“码农”, 所以直接问我了 “ CPU的双核双线程和双核4线程有啥什么区别? ” 虽然我不明白“码农”为什么要知道这些…… ** 不过, 巧了, 咸鱼君刚好知道!(差点不知道, 多影响形象!) 那么, 在CPU原创 2020-08-06 10:07:28 · 607 阅读 · 0 评论 -
07. 就该这么学并发 - 上下文切换
前言 前面的几章, 我们有提到个名词“上下文切换” 这是个什么东西呢? 其实很好理解, 我们看一本书籍时,往往间隔的看(很少有人一天看完的吧?!), 那么如何保证自己下次是从上一次断点处看呢? 显而易见, 我们用书签! “上下文切换”就是计算机的“书签”. 本章,我们来学习“上下文切换”原理以及如何减少“上下文切换”. 在此之前, 还得先复习下前面提到的进程和线程, 因为上下文切换的对象就是进程和线程. 线程与进程 进程是操作系统的管理单位,也是系统分配资源的基本单位; 线程则是进程的管理单位, 也是是CP原创 2020-07-28 10:07:13 · 362 阅读 · 0 评论 -
06. 就该这么学并发 - 如何保证线程安全
前言 上节,我们对线程安全有了较全面的认知. 我们知道, 线程之所以不安全, 主要是多线程下对可变的共享资源的争用导致的. 衡量线程是否安全, 主要从三个特性入手 原子性 可见效 有序性 只要保证了这三个特性,我们就认为线程是安全的, 多线程下执行结果才会和单线程执行结果统一起来. 本章,我们就来聊聊**如何保证线程安全**的问题. 如何保证原子性 常用的保证Java操作原子性的工具是**锁和同步方法(或者同步代码块)**. 我们举个例子: public class Test { privat原创 2020-07-16 10:20:18 · 510 阅读 · 0 评论 -
05. 就该这么学并发 - 线程安全
前言 通过前几章对“线程生命周期”的讲解, 相信大家对于线程有了基本的了解. 本章,我们就来聊聊**线程安全**问题. 线程安全 一般我们说到线程安全, 都是**针对多线程的(单线程不存在线程安全问题**) 多线程之所以会出现安全问题, 主要是因为 存在同时访问同一个共享、可变资源的情况 这种资源可以是:一个变量、一个对象、一个文件等 共享 意味着该资源可以由多个线程同时访问 可变 意味着该资源可以在其生命周期内被修改 简而言之,如果 代码在多线程下执行和在单线程下执行永远都能获得一样的结果原创 2020-07-10 16:45:23 · 230 阅读 · 0 评论 -
04. 就该这么学并发 - 线程的结束
前言 接上章“线程的阻塞”,我们继续讲线程的生命周期中最后一个状态“销毁” 销毁(Dead) 线程会以如下3种方式结束,结束后就处于死亡状态: - run()或call()方法执行完成,线程正常结束 - 线程抛出一个未捕获的Exception或Error - 直接调用该线程stop()(已废弃,不推荐使用)方法来结束该线程, 该方法容易导致死锁,通常不推荐使用 线程一旦死亡,就不能复生. 如果在一个死去的线程上调用**start()**方法,会抛出 java.lang.IllegalThreadS原创 2020-06-29 14:57:51 · 276 阅读 · 0 评论 -
03. 就该这么学并发 - 线程的阻塞
前言 上章介绍了**线程生命周期的就绪和运行**状态 这章讲下线程生命周期中最复杂的**阻塞**状态 阻塞(Blocked) 在开始之前 我们先**科普**几个概念 阻塞,挂起,睡眠 区分 阻塞 在线程执行时,所需要的资源不能立马得到,则线程被“阻塞”,直到满足条件则会继续执行 阻塞是一种“被动”的状态 挂起 线程执行时,因为“主观”需要,需要暂停执行当前的线程,此时需要“挂起”当前线程. 挂起是“主动”的动作行为,因为是“主动”的,所以“挂起”的线程需要“唤醒”才能继续执行 睡眠 线程执行时,因为“主原创 2020-06-16 10:05:31 · 389 阅读 · 0 评论 -
02. 就该这么学并发 - 线程的就绪与执行
前言 接上章“线程的创建”, 本章我们聊聊线程生命周期的“就绪”和“运行”状态. 就绪(Runnable) 线程对象的start()方法被调用后,该线程即进入就绪状态 - 此时JVM会为其创建方法调用栈和程序计数器; - 该状态的线程一直处于"线程就绪队列" 尽管是采用队列形式,事实上,把它称为可运行池而不是可运行队列, 因为CPU的调度不一定是按照先进先出的顺序来调度的 - 此时线程等待系统为其分配CPU时间片,并不是说执行了start()方法就立即执行 简而言之, 假设有子线程t, 那么原创 2020-06-09 16:01:01 · 258 阅读 · 0 评论 -
01. 就该这么学并发 - 线程的创建(多姿势)
本章开始,咸鱼君将开启一个新的专栏 就该这么学并发 来记录学习Java并发编程的相关内容~ 前言 说到**并发编程,就不得不先说多线程,因为并发的本质就是多线程的处理** 进程和线程 进程 (ps: 每一个程序就是一个进程) 进程指运行中的应用程序,每个程序运行时就会开启一个进程 进程是系统分配资源的最小单位 进程有独立系统资源(进程间的资源是隔离的) 每个进程至少有一个线程 - 线程 (ps: 进程至少有一个线程) 线程依托于进程 线程除了支持本身运行的一点系统资源外(如: 控制线程运原创 2020-06-03 11:00:43 · 343 阅读 · 1 评论
分享