第七十七天
首先明确核心问题:当多个线程同时对共享资源进行读写操作时,若没有同步机制,就会出现数据竞争。像 ArrayList、HashMap 这类集合都是非线程安全的,而 Vector、Hashtable 虽然线程安全,
后来尝试了两种优化方案,一是用 Collections.synchronizedList() 将 ArrayList 包装成线程安全的集合,本质是在每个方法里加了同步锁;二是直接使用 JUC 包下的 CopyOnWriteArrayList ,它采用写时复制的思想,读操作无锁,写操作通过复制新数组实现,更适合读多写少的场景。
对比下来,不同场景的选型逻辑很清晰:低并发场景用 synchronized 包装的集合足够;高并发读多写少用 CopyOnWrite 系列;若涉及复杂的同步逻辑,还可以用 ReentrantLock 手动控制锁的粒度,灵活性更高。
最后复盘时发现,自己之前对“线程安全”的理解停留在表面,忽略了锁粒度和性能之间的平衡。其实写代码时,先明确共享资源的访问方式,再选择合适的同步方案,远比盲目使用线程安全类更重要。
技术的坑都是踩出来的,今天的复盘也算收获满满。

浙公网安备 33010602011771号