并发编程
文章平均质量分 96
不一样的花朵
只要学不死,就往死里学.别人可以在智商上面压制自己,但是绝对不能在学习时间上面压制自己.
展开
-
史诗级详解深入JMM
JMM1. JMM1.1 JMM 研究的到底是什么?JMM 即 Java 内存模型 A. Java 内存结构,如栈、堆? B. JVM 调优? C. JVM 垃圾回收机制? D. 多线程下 Java 代码的执行顺序,共享变量的读写?1.2 学习目标多线程下,读写共享变量会有哪些问题解决这些问题的钥匙 - Java 内存模型解决这些问题的手段 - 掌握同步方法更多安全问题与解决方法1.3 参考资料Java Language Specification Chapter原创 2021-10-17 18:44:39 · 241 阅读 · 0 评论 -
Netty02-入门
二. Netty 入门1. 概述1.1 Netty 是什么?Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients.Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端1.2 Netty 的作者他原创 2021-05-23 08:39:27 · 290 阅读 · 0 评论 -
并发编程之J.U.C的第二篇
并发编程之J.U.C的第二篇3.2 StampedLock3.2 StampedLock该类自JDK8加入,是为了进一步优化读性能,它的特点是使用读锁、写锁时都必须配合【戳】使用加解读锁加锁写锁乐观锁,StampedLock 支持 tryOptimisticRead()方法(乐观读),读取完毕后需要做一次戳校验,如果校验通过,表示这期间确实没有写操作,数据可以安全使用,如果校验没通过...原创 2020-02-25 11:41:47 · 253 阅读 · 0 评论 -
并发编程之J.U.C的第一篇
并发编程之J.U.CAQS 原理AQS 原理全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架特点 :用state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetStat...原创 2020-02-22 15:42:51 · 334 阅读 · 0 评论 -
并发编程之线程池
并发编程之线程池4. 自定义线程池ThreadPoolExecutor4. 自定义线程池步骤1 :自定义拒绝策略接口ThreadPoolExecutor1)线程池状态ThreadPoolExecutor使用int的高3位来表示线程池状态,低29位表示线程数量从数字上比较,TERMINATED>TIDYING>STOP>SHUTDOWN>RUNNING这...原创 2020-02-20 09:02:36 · 196 阅读 · 0 评论 -
并发编程之共享模型的不可变
并发编程之共享模型的不可变7.2 不可变设计享元模式2. 体现2.1 包装类final原理1.设置final变量的原理7.2 不可变设计final的使用发现该类、类中所有属性都是final的属性用final修饰保证了该属性是只读的,不能修改类用final修饰保证了该类中的方法不能被覆盖,防止子类无意间破坏不可变性保护性拷贝使用字符串时,也有一些跟修改相关的方法,比如substri...原创 2020-02-17 11:48:56 · 328 阅读 · 0 评论 -
并发编程之无锁
并发编程之无锁6.2 CAS与volatile6.2 CAS与volatile其中的关键是compareAndSet,它的简称就是CAS(也有Compare And Swap的说法),它必须是原子操作。注意其实CAS的底层是lock cmpxchg指令(X86架构),在单核CPU和多核CPU下都能够保证【比较-交换】的原子性。在多核状态下,某个核执行到带lock的指令时,CPU会让...原创 2020-02-16 20:35:26 · 753 阅读 · 0 评论 -
并发编程之Java内存模型
并发编程之Java内存模型5.1 Java内存模型5.2 可见性5.1 Java内存模型JMM即Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。JMM体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受cput缓存的影响有序性 - 保证指令不会受cpu指令并行优化的影...原创 2020-02-15 09:40:58 · 171 阅读 · 0 评论 -
并发编程之第四篇
并发编程之第四篇4.11 多把锁4.12 活跃性饥饿4.13 ReentrantLock4.11 多把锁一间大屋子有两个功能 : 睡觉、学习、互不相干现在小南要学习,小女要睡觉,但如果只用一间屋子(一个对象锁)的话,那么并发度很低解决方法时准备多个房间(多个对象锁)4.12 活跃性死锁有这样的情况 : 一个线程需要同时获取多把锁,这时就容易发生死锁t1 线程获得A对象锁,接下来想...原创 2020-02-13 08:15:17 · 238 阅读 · 0 评论 -
并发编程之第三篇(synchronized)
并发编程之第三篇(synchronized)3. 自旋优化4. 偏向锁撤销-其它线程使用对象撤销-调用wait/notify批量重偏向批量撤销5. 锁消除4.7 wait/notifyAPI介绍3. 自旋优化重量级锁竞争的时候,还可以使用自旋来进行优化,如果当前线程自旋成功(即这时候持锁线程已经退出了同步块,释放了锁),这时当前线程就可以避免阻塞。自旋重试成功的情况自旋重试失败的情况...原创 2020-02-10 11:17:29 · 308 阅读 · 0 评论 -
并发编程之线程第二篇
3.12 五种状态这是从操作系统层面来描述的【初始状态】仅是在语音层面创建了线程对象,还未与操作系统线程关联【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由CPU调度执行【运行状态】指获取了CPU时间片运行中的状态(1)当CPU时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换【阻塞状态】(1)如果调用了阻塞API,如BIO读写文件...原创 2020-02-08 22:05:43 · 247 阅读 · 0 评论 -
并发编程之线程第一篇
3.4 原理之线程运行Java虚拟机栈JVM中由堆、栈、方法区所组成,其中栈内存是给线程使用,每个线程启动后,虚拟机就会为其分配一块栈内存。每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法线程上下文切换(Thread Context Switch)因为以下一些原因导致cpu不再执行当前的线程,转而执行另一个...原创 2020-02-07 20:21:04 · 425 阅读 · 0 评论 -
并发编程之进程与线程
并发编程之进程与线程2.1 线程与进程2.1.1 进程2.1.2 线程2.1.3 二者对比2.2 并行与并发2.3 应用2.1 线程与进程2.1.1 进程程序指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就...原创 2020-02-06 11:35:29 · 174 阅读 · 0 评论 -
并发编程
线程安全 线程安全概念 : 当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. synchronized : 可以在任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或"临界区". 总结 : 当多个 线程访问myThread的run方法时,以排队的方式进行处理(这里排队是按照CPU分配的先后顺...原创 2019-05-14 20:52:24 · 137 阅读 · 0 评论