Java 并发编程
文章平均质量分 80
Java 并发编程是自己目前一直想攻克的难点,其涉及的知识非常之多,所以以专栏的形式将自己关于 Java 并发的知识串联起来。
打磨时光
我是打磨匠,关注软件开发,打磨产品,服务人类。
展开
-
记一次CPU突然飙升到 100% 问题排查
线上 CPU 飚高问题该如何定位问题呢?是因为线程太多,导致上下文切换?还是因为应用代码中出现了死循环?还是GC频繁导致 CPU 突然飙升?该如何入手呢?首先要知道那些情况会导致 CPU 的突然飙升:频繁GC,访问量高时,有可能造成频繁的GC、甚至FGC。当调用量大时,内存分配过快,就会造成GC线程不停的执行,导致CPU飙高序列化与反序列化,例如应用代码执行xml解析时,调用量增大...原创 2019-11-13 21:37:10 · 6818 阅读 · 0 评论 -
Executor 饱和策略
前言在使用线程池的时候,如果提交的任务超过了线程的大小,就会将任务放到一个队列中,这个队列可以使无界队列 LinkedBlockingQueue,也可是是有界队列 ArrayBlockingQueue。当有界队列满了的时候,饱和策略就开始发挥作用。ThreadPoolExecutor 的饱和策略可以通过调用 setRejectedExecutionHandler 来修改。JDK 提供了几种...原创 2019-08-11 12:21:52 · 224 阅读 · 0 评论 -
ExecutorService 四种使用方式
Java 通过 Executors 提供四种线程池, 例如:newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。...原创 2019-08-10 12:11:23 · 1540 阅读 · 0 评论 -
深入理解 ThreadLocal
前言ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。ThreadLocal 内部结构Thread 源码: /* ThreadLocal values pertaining to this thread. This ma...原创 2019-08-03 22:10:26 · 111 阅读 · 0 评论 -
volalite 可见性和原子性
在自己写的一个爬虫项目中,爬虫会根据采集的链接不断继续爬行下去,这个时候设置了一个开关 stop,当 stop = true 时,爬虫就会停止爬取。我写了一个接口来控制这个 stop 字段,发现不会立即停止。于是想到了 关于 volatile 的特性,那么实现可见性和原子性有的方式目前总结了三种:public class VolatileTest { /** * done...原创 2019-06-12 21:30:50 · 543 阅读 · 0 评论 -
非原子的 64位操作引发的并发问题
前言我们知道在多线程中,对共享变量进行修改,有可能不能读到立即修改的值,但是其最多是一个失效值,而不是随机值示例代码:public class AA { private int value; public int getValue() { return value; } public void setValue(int value) {...原创 2019-08-03 17:54:26 · 338 阅读 · 0 评论 -
synchronize 重入锁
前言重入锁重入的一种实现方式:为每一个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁被认为是没有被任何线程持有。当一个线程持有一个未持有的锁的时候,JVM 将记下锁的持有者,并且将获取计数值将其置1。如果这个线程再次获取这个锁,计数值+1,当线程退出同步代码块时,计数值-1。当计数值为0时,释放锁。示例如下:public class A { public synchron...原创 2019-08-03 17:19:51 · 169 阅读 · 0 评论 -
java 线程 notify、notifyAll
前言在 《Java安全编码标准》中,关于 Java 线程安全,有一小节提到在静态条件下,使用通知 notify ,要使用 notifyAll 通知所有的等待线程而不是通知某一线线程。英文文档:https://wiki.sei.cmu.edu/confluence/display/java/2+Rules代码示例:public class NotifyTest implements Runn...原创 2019-06-26 23:18:16 · 363 阅读 · 0 评论