同步块未覆盖到所有场景。
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语言提供了丰富的并发工具和API,如线程、守护线程、线程池、同步机制(synchronized、wait/notify)、并发集合...
为了帮助开发者避免常见的并发陷阱,《Java并发编程实战》还提供了一系列的最佳实践建议,比如: - **正确使用同步机制**:强调了在使用`synchronized`关键字或`ReentrantLock`时需要注意的问题。 - **异常处理**:...
- **最佳实践**:结合具体案例分享Java并发编程的最佳实践,涵盖设计模式的应用、常见陷阱规避等方面。 ### 实战案例 - **多线程下载**:利用多线程技术实现文件的分块下载与合并,展示并发技术在提高下载速度方面...
通过阅读这些书籍,开发者可以深入理解Java并发编程的底层机制,掌握有效的并发编程技巧,提高程序的运行效率,同时避免并发编程中常见的陷阱和问题。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。
7. **并发编程最佳实践**:书中会讨论如何避免并发编程中的常见陷阱,比如避免过度同步、正确处理中断、避免死锁和饥饿等问题。此外,还会讲解如何进行并发性能调优,包括使用JVM的监控和调试工具。 8. **原子操作...
Java并发编程是Java开发者必须掌握的关键技能之一,它涉及到如何在多线程环境中高效、安全地执行程序。并发编程能够充分利用多核处理器的计算能力,提高应用程序的响应速度和整体性能。《Java编程并发实战》这本书是...
通过学习《JAVA并发编程实战》这本书,开发者可以掌握以上这些关键概念,并学会如何在实际项目中应用,避免并发编程中的陷阱,编写出高效、稳定的多线程程序。书中可能还会深入讨论线程安全的编程习惯、性能调优技巧...
│ 高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │ 高并发编程第一阶段21讲、通过实验分析This锁的存在.mp4 │ 高并发编程第一阶段22讲、通过实验分析Class锁的存在.mp4 │ 高并发编程...
总之,《Java并发编程实践》是一本全面、深入的指南,旨在帮助Java开发者掌握并发编程的核心概念和技术,无论是在设计、编码、调试还是维护多线程Java程序方面,都是一本不可或缺的参考书籍。随着摩尔定律效应逐渐...
《Java并发编程实战》是Java开发者必读的经典书籍之一,它深入浅出地探讨了Java平台上的并发编程技术。这本书不仅提供了理论知识,还包含了大量实际应用案例和源码,帮助读者更好地理解和掌握多线程编程的核心概念。...
《Java并发编程实践》这本书是Java开发者深入理解并发编程的重要...通过阅读《Java并发编程实践》,开发者可以学习到如何编写高效、稳定的并发程序,避免并发陷阱,提升软件质量。同时,书中实例丰富,便于实践和理解。
《Java并发编程实践》这本书是Java开发者深入理解并发编程的重要参考资料。并发和多线程是现代计算机系统中不可或缺的部分,特别是在Java这样的多线程支持语言中。本书详细介绍了如何在Java环境中有效地设计和实现...
在Java的世界里,并发编程是不可或缺的一部分,特别是在现代多核处理器系统中,理解和运用并发技术显得尤为重要。 本书的中文版稀缺性凸显了其价值,它不仅提供了英文原版,还包含了中文翻译的前九章,对于想要学习...
总结起来,J.U.C库是Java并发编程中不可或缺的一部分,它以丰富的并发工具类、高效的执行效率和简洁的API设计,帮助开发者构建起强大的并发应用程序。通过理解J.U.C的工作原理和应用方法,开发者不仅能够编写出性能...
总之,《JAVA并发编程实践》一书涵盖了从基础知识到高级技巧的全面内容,旨在帮助开发者在并发编程的世界中游刃有余,避免常见的陷阱,并提升软件的性能和可靠性。通过学习和实践书中的知识,你将能够更有效地驾驭...
Java并发编程是Java开发者必须掌握的关键技能之一,尤其是在多核处理器和分布式系统广泛使用的今天。以下是对标题和描述中提及的两本经典书籍——《Concurrent Programming in Java》和《Java Concurrency in ...
《Java并发编程实践》是Java并发编程领域的一本经典著作,由Brian Goetz等多位作者共同撰写。这本书深入探讨了如何在Java环境中有效地编写多线程和并发程序,旨在帮助开发者理解和解决并发编程中的各种挑战。 并发...
《Java虚拟机并发编程》一书是关于在JVM平台上进行高效并发编程的权威指南。它详细介绍了如何利用Java平台上的各种并发机制来设计、实现和优化多线程应用程序。书中不仅详细讲解了Java同步模型、软件事务内存(STM)...