同步块未覆盖到所有场景。
import java.util.HashMap; import java.util.Map; public class CacheManage { private Map<String, String> cache = new HashMap<String, String>(); public static int THREADS_COUNT = 2; public void fresh() { synchronized (cache) { cache.clear(); } } public void put(String key, String value) { synchronized (cache) { cache.put(key, value); System.out.println(Thread.currentThread().getName() + " cache.put--------" + value); } } public String get(String key) { System.out.println(Thread.currentThread().getName() + " cache.get-----" + cache.get(key)); return cache.get(key); } public static void main(String[] args) { final CacheManage cacheManage = new CacheManage(); Thread[] threads = new Thread[THREADS_COUNT]; for (int i = 0; i < THREADS_COUNT; i++) { threads[i] = new Thread(new Runnable() { public void run() { for (int i = 0; i < 10; i++) { cacheManage.put("a", i + 1 + ""); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } cacheManage.get("a"); } } }); threads[i].start(); } } }
上面的缓存管理类,启动2个线程对其进行访问,每个线程做的事情都一样,先put后get,打印的结果为:
Thread-0 cache.put--------1
Thread-1 cache.put--------1
Thread-0 cache.get-----1
Thread-0 cache.put--------2
Thread-1 cache.get-----1
...
分析:Thread0在写数据(将缓存修改成2)的同时,thread1将数据取出来了,thread1读取了旧的缓存。
总结:读时不能写 写时不能读 可以并发读 不能并发写
相关推荐
│ 高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │ 高并发编程第一阶段21讲、通过实验分析This锁的存在.mp4 │ 高并发编程第一阶段22讲、通过实验分析Class锁的存在.mp4 │ 高并发编程...
本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段(扩容,缓存,队列,拆分等),构建完整的并发与高并发知识体系,胜任实际开发中并发...
java并发编程pdf文档第二部分:Java并发编程实战.pdf、Java多线程编程核心技术.pdf、实战Java高并发程序设计.pdf
java并发编程艺术java并发编程艺术java并发编程艺术java并发编程艺术java并发编程艺术
JAVA并发编程实践中文版 英文版 原书源码 带书签 java_concurrency_in_practice.pdf 英文版还是不错的,但是中文版的译者典型的没有技术功底,介绍上说什么专家, 翻译的非常差劲,有些句子都不通顺,都不知道自己去...
然后阐述一些重要的知识点,包括测试技巧、互操作、取消并发、函数式编程与OOP、同步、调度;最后介绍了几个实用技巧。全书共包含70多个有配套源码的实用方法,可用于服务器程序、桌面程序和移动应用的开发。, 本书...
JAVA并发编程艺术 高清pdf : 1.并发变成的挑战 2. java并发机制的底层实现原理 3. java 内存模型 4. java并发编程基础 5.java中的锁。。。。。。。
java并发编程实战源码 附有本书所有源码,maven 导入 eclipse或idea
第一部分 基础知识 第2章 线程安全性 2.1 什么是线程安全性 2.2 原子性 2.2.1 竞态条件 2.2.2 示例:延迟初始化中的竞态条件 2.2.3 复合操作 2.3 加锁机制 2.3.1 内置锁 2.3.2 重入 2.4 用锁来保护状态 ...
并发编程并发编程并发编程
并发编程之深入理解JMM&并发三大特性
高并发和并发编程并发编程:线程安全+线程封闭+线程调度
并发编程领域的扛鼎之作,作者是阿里和1号店的资深Java技术专家,对并发编程有非常深入的研究,《Java并发编程的艺术》是他们多年一线开发经验的结晶。本书的部分内容在出版早期发表在Java并发编程网和InfoQ等技术...
阿里专家级并发编程架构师级课程,完成课程的学习可以帮助同学们解决非常多的JAVA并发编程疑难杂症,极大的提高JAVA并发编程的效率。课程内容包括了JAVA手写线程池,UC线程池API详解,线程安全根因详解,锁与原子类...
Java后端开发,JUC并发编程Java后端开发,JUC并发编程Java后端开发,JUC并发编程Java后端开发,JUC并发编程Java后端开发,JUC并发编程Java后端开发,JUC并发编程Java后端开发,JUC并发编程Java后端开发,JUC并发编程...
然后阐述一些重要的知识点,包括测试技巧、互操作、取消并发、函数式编程与OOP、同步、调度;最后介绍了几个实用技巧。全书共包含70多个有配套源码的实用方法,可用于服务器程序、桌面程序和移动应用的开发。, 本书...
Java并发编程系列- volatile;Java并发编程系列- volatile;Java并发编程系列- volatile;Java并发编程系列- volatile;Java并发编程系列- volatile;
深入讲解java并发编程技术,多线程、锁以及java内存模型等
java 并发编程的艺术pdf清晰完整版 源码