并发
文章平均质量分 70
阿 霖
热爱编程,正在进阶java后端,对分布式感兴趣
展开
-
【Java并发】模拟JDK1.7 HashMap发生死锁
注:如果当前JDK版本不是1.7可以先安装一下JDK1.7,然后在IDEA的Project Structure调一下使用的JDK版本,再在settings中调一下java complier的版本,就可以使用JDK1.7了。(如果是maven项目不要使用maven重新导入,否则Project Structure中的修改会被还原)代码非常简单,创建80个线程一直插入数据,多试几次,知道发生死锁。public class TestInput { static HashMap<String, S原创 2021-04-17 16:58:34 · 233 阅读 · 0 评论 -
【Java并发】死锁实例(两个线程互相等待资源)
开启两个线程,先各自获取一个资源,然后尝试获取对方的资源。public class TestInput { static Object resource_one = new Object(); static Object resource_two = new Object(); public static void main(String[] args) { Thread1 thread1 = new Thread1(); Thread2 thr原创 2021-04-17 17:17:38 · 403 阅读 · 0 评论 -
【Java并发】JUC 常见基础面试题
文章目录JUC 面试题谈谈 volatile可见性验证为什么不保证原子性如何解决原子性JMM(Java 内存模型)可见性原子性有序性DCL (Double Check Lock)版本单例模式CAS(CompareAndSwap)Unsafe 类举例CAS 的缺点ABA问题集合类不安全问题公平锁和非公平锁可重入锁(递归锁)LockSupport原理使用及对比参考资料JUC 面试题谈谈 volatilevolatile 是由 Java 虚拟机提供的一种轻量级的同步机制。保证可见性不保证原子性禁止重原创 2021-02-21 16:23:47 · 1829 阅读 · 3 评论 -
【JUC源码】ConcurrentHashMap 超详细源码学习笔记 (jdk1.8)
ConcurrentHashMap结构数组+链表+红黑树1. 字段分析// 字段分析 private static final int MAXIMUM_CAPACITY = 1 << 30; private static final int DEFAULT_CAPACITY = 16; static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; // jdk1.7遗留下来的,1.8只在初始化中原创 2021-02-21 16:05:52 · 488 阅读 · 15 评论 -
【JUC源码】JAVA并发(三)_AQS独占锁_保姆级源码解析
同步队列同步队列节点源码:public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable { ...... //AQS通过头尾指针管理同步队列 private transient volatile Node head;//头节点 private transient volatile Node ta原创 2020-09-27 16:39:47 · 167 阅读 · 0 评论 -
【Java并发】Java并发(二)_线程状态转换以及基本操作
线程状态转换以及基本操作思维导图1.新建线程1.1 Java程序天生就是一个多线程程序,包含了分发处理发送给JVM信号的线程调用对象的finalize()方法的线程清除Reference的线程main线程,用户程序的入口1.2 如何新建线程继承Thread类,重写run方法通过实现Runable接口通过实现Callable接口2.线程状态转换2.1 线程的状态NEW:初始状态,线程被构建,但还没有调用start()方法RUNNABLE:运行状态,Java将操作系统中原创 2020-09-23 19:30:04 · 115 阅读 · 0 评论 -
【Java并发】Java并发(一)_并发编程的优缺点
并发编程的优缺点思维导图:1. 为什么要用并发1.1 并发编程可以将多核CPU的计算能力发挥到极致,提高性能1.2 面对复杂业务模型,并发程序会比串行程序更适应业务需求,并发程序更能吻合这种业务拆分2.并发编程有哪些缺点2.1 频繁的上下文切换概念时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得多个线程是同时执行的,时间片一般是几十毫秒。而每次切换时,需要保存当前的状态起来,以便能够进行恢复先前状态,而这个切换时非常损耗性能,过于频繁反而无法原创 2020-09-23 19:17:43 · 289 阅读 · 0 评论 -
Java并发编程实践读书笔记_对象的共享(二)
一、可见性通过对get和set等方法进行同步,可以使MutableInteger成为一个线程安全的可变整数类。public class SynchronizedInteger { private int value; public synchronized int get(){ return value; } public synchronized void set(int value){ this.value = va原创 2020-09-17 19:53:36 · 71 阅读 · 0 评论 -
Java并发编程实践读书笔记_线程安全性(一)
一、什么是线程安全性在线程安全性中,最核心的就是正确性。正确性含义:某个类的行为与其规范完全一致。线程安全: 当多个线程访问某个类时,不管运行数时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。注意:在线程安全类中封装了必要的同步机制,因此客户端无须进一步采取同步措施。无状态对象一定是线程安全的。比如,Servlet框架中的类StatelessFactorizer是无状态的:它既不包含任何域,也不包原创 2020-09-16 20:55:11 · 120 阅读 · 0 评论