Loading

摘要: 线程安全 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的 Brian Goetz 多线程安全问题是什么? 问题: 多线程在修改共享资源的时 阅读全文
posted @ 2020-06-26 17:42 bangiao 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 无锁 乐观锁(非阻塞) 共享模式之无锁 CAS 与 volatile 原子整数 原子引用 原子累加器 Unsafe CAS无锁方案 CAS无锁主要看重三个变量: 预估值 + 修改值 + 主存值 预估值: 主要用来判断是否等于主存值, 是则将修改值修改到主存值中 修改值: 即将需要修改的新值, 修改到 阅读全文
posted @ 2020-06-26 17:40 bangiao 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 管程 悲观锁(阻塞) 临界区 一段代码块对共享资源存在多个线程的读写操作, 我们就叫它临界区 临界区存在多个线程竞争共享资源的问题, 由于分时系统, 我们的cpu不能一直负责一条线程的执行, 所以在cpu切换的时候需要保存当时的场景, 之后cpu回来后需要恢复场景再次执行代码, 我们简称这个过程为线 阅读全文
posted @ 2020-06-26 17:39 bangiao 阅读(489) 评论(0) 推荐(0) 编辑
摘要: CPU 缓存结构原理 CPU 缓存结构 查看 cpu 缓存 速度比较 查看 cpu 缓存行 cpu 拿到的内存地址格式是这样的 CPU 缓存读 根据低位,计算在缓存中的索引 判断是否有效 0 去内存读取新数据更新缓存行 1 再对比高位组标记是否一致 一致,根据偏移量返回缓存数据 不一致,去内存读取新 阅读全文
posted @ 2020-06-26 17:37 bangiao 阅读(928) 评论(0) 推荐(0) 编辑
摘要: Java与协程 内核线程的局限 通过一个具体场景来解释目前Java线程面临的困境。今天对Web应用的服务要求,不论是在请求数量上还是在复杂度上,与十多年前相比已不可同日而语,这一方面是源于业务量的增长,另一方面来自于为了应对业务复杂化而不断进行的服务细分。现代B/S系统中一次对外部业务请求的响应,往 阅读全文
posted @ 2020-06-26 17:34 bangiao 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 目录 01.Java和线程 02.Java与协程 03.CPU缓存结构和java内存模型 04.管程-悲观锁和锁优化 05.乐观锁 - 无锁方案 06.线程安全 07.线程池 08.JUC 09.高并发测试 10.类加载器 Java与线程 线程的类型 线程是比进程更轻量级的调度执行单位,线程的引入, 阅读全文
posted @ 2020-06-26 17:33 bangiao 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 为什么需要编译自己的jvm源码? 想象下, 你想看看java线程是如何start的? 去源码里一找 native void start0(), 此时如果你对jvm源码比较熟悉, 那么可以下载openJDK源码借助vscode去查询底层实现, 但如果你不知道呢? 又比如 java高并发编程艺术 一书中 阅读全文
posted @ 2020-06-26 17:30 bangiao 阅读(1149) 评论(0) 推荐(0) 编辑
摘要: 下载地址: hsdis linux下将hsdis.so拷贝到 /usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64/lib/server 目录下(相对应于你的jdk目录lib/server下) window好像也差不多 可以先测试下是否成功 ja 阅读全文
posted @ 2020-06-25 10:28 bangiao 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 看了 why大佬的 博客一个困扰我122天的技术问题,我好像知道答案了。 发现他留了个坑,在变量i类型为 int 或者 Integer 时,int类型的i死循环了而Integer类型的i可以结束 int类型的i,出现死循环的机会是随机的,可能需要多来几次,估计1000来次吧 代码在下面,各位大佬可以 阅读全文
posted @ 2020-06-23 01:58 bangiao 阅读(788) 评论(2) 推荐(0) 编辑
摘要: 重点 存在线程安全问题必须满足三个条件: 1.有共享变量, 有共享变量, 有共享变量(重要的事情说三边) 2.处在多线程环境下 3.共享变量有直接修改(读和写)操作或者每次修改结果都不一样。 并发的风险和优势 Java与线程 线程的实现 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程 阅读全文
posted @ 2020-05-28 19:33 bangiao 阅读(372) 评论(0) 推荐(0) 编辑