摘要: 1.为什么使用ConcurrentHashMap 并发模式下使用HashMap的put会产生环形链,导致死循环 HashTable和Collections.synchronizedMap(map)则使用synchronized保证线程安全,效率很低 ConcurrentHashMap分段锁技术能够有 阅读全文
posted @ 2021-03-11 21:08 菜鸟kenshine 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 学习资料 《Java并发编程的艺术》第5章 5.4~5.6 1.读写锁简介 读写锁与排他锁: 排他锁:同一个时刻只能运行一个线程进行访问(不管读写),如ReentrantLock 读写锁:同一时刻允许有多个读线程访问,但是有写线程访问时,所有其他线程(不管读写)都被阻塞 Java并发包提供的读写锁的 阅读全文
posted @ 2021-03-11 21:05 菜鸟kenshine 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 目录 学习资料 《Java并发编程的艺术》第5章 5.1~5.3 1.Lock接口 和Synchronized类似,只是需要显式的获取锁和释放锁,不太便捷,但是更加灵活,提供了很多Synchronized所无法提供的特性(控制并操作锁,尝试获取锁,中断获取锁,超时获取锁等) Lock的简单使用: L 阅读全文
posted @ 2021-03-11 20:59 菜鸟kenshine 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 目录 学习资料 《Java并发编程的艺术》第4章 4.4 1.等待超时模式 等待超时伪代码如下: // 对当前对象加锁 public synchronized Object get(long mills) throws InterruptedException { long future = Sys 阅读全文
posted @ 2021-03-11 20:54 菜鸟kenshine 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 学习资料 《Java并发编程的艺术》第4章 4.1~4.3 1.线程简介 1.1 什么是线程 现代操作系统调度的最小单元,也叫轻量级进程 一个进程可以创建多个线程,线程有各自的计数器,堆栈和局部变量等属性 处理器在线程上高速切换(时间片调度),让使用者感觉到这些线程是同时执行的 1.2 为什么要使用 阅读全文
posted @ 2021-03-11 20:51 菜鸟kenshine 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 1. happens-before 1.1 JMM的设计要求 设计JMM时需要考虑: 程序员对内存模型的使用。希望内存模型易于理解。 JMM的happens-before规则简单易懂,向程序员提供了足够强的内存可见性保证 编译器和处理器对内存模型的实现。希望内存模型对编译器和处理器限制越少越好(便于 阅读全文
posted @ 2021-03-11 20:46 菜鸟kenshine 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 1.volatile内存语义 Volatile主要作用是使变量在多个线程间可见 1.1 volatile特性 可见性:对一个volatile变量的读,总能看到(任意线程)对该变量最后的写入 原子性:即使是64为的long型和double型变量,只要声明为volatile变量,对该变量的读写就具有原子 阅读全文
posted @ 2021-03-11 20:35 菜鸟kenshine 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 1.内存模型基础 Java内存模型,Java Memory Model简称JMM。 1.1 两个关键问题 线程间如何通信和线程间如何同步 a.如何通信 两种机制:共享内存,消息通信 共享内存: 线程共享程序公共状态,通过读写公共状态进行通信 消息通信: 线程间通过发送消息显示通信 Java采用的是共 阅读全文
posted @ 2021-03-11 20:25 菜鸟kenshine 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 1.依赖JVM java代码编译为字节码,JVM执行字节码生成汇编指令,CPU执行汇编指令。 java并发机制依赖于JVM的实现和CPU指令。 2.Volatile实现原理 轻量级Sycronized,保证了共享变量的可见性 保证一个线程修改一个共享变量后,另一个线程总是能够读到这个修改后的变量值 阅读全文
posted @ 2021-03-11 20:16 菜鸟kenshine 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 0.学习资料 《Java并发编程的艺术》第一章 1.上下文切换 单核处理器支持多线程时,通过cpu时间片切换(分配)来实现 时间片执行完可能会切换到其他任务 切换前保存当前任务状态,然后加载其他任务,之后某个时间片切换回该任务可继续加载该任务,这个任务切换过程就是一次上下文切换 任务从保存到加载的过 阅读全文
posted @ 2021-03-11 20:02 菜鸟kenshine 阅读(110) 评论(0) 推荐(0) 编辑