方法别再返回 null 了!Optional的4种高级模式
2026/6/6 9:27:56
解决线程安全问题,核心目标是确保多个线程在并发访问共享资源时,程序的行为仍然正确、一致、可预测。可以从以下几个关键方面入手:
“不共享,就安全”
String、Integer、LocalDateTime等,一旦创建无法修改。✅ 优点:无需同步,性能最高,最安全。
让数据只属于一个线程
privatestaticfinalThreadLocal<SimpleDateFormat>formatter=ThreadLocal.withInitial(()->newSimpleDateFormat("yyyy-MM-dd"));注意:需防止内存泄漏(在线程池中使用后及时
remove())。
控制对共享资源的互斥访问
publicsynchronizedvoidincrement(){count++;}// 或publicvoidmethod(){synchronized(lock){/* 临界区 */}}privatefinalLocklock=newReentrantLock();publicvoiddoSomething(){lock.lock();try{/* 临界区 */}finally{lock.unlock();}}✅ 适用场景:必须修改共享可变状态时。
⚠️ 风险:死锁、性能下降、锁粒度不当。
直接使用JDK提供的并发工具
| 类型 | 安全替代方案 |
|---|---|
| List | CopyOnWriteArrayList,Collections.synchronizedList() |
| Set | ConcurrentHashMap.newKeySet(),CopyOnWriteArraySet |
| Map | ConcurrentHashMap |
| Queue | ConcurrentLinkedQueue,BlockingQueue实现类 |
| 计数器 | AtomicInteger,LongAdder |
| 示例: |
privatefinalConcurrentHashMap<String,User>userCache=newConcurrentHashMap<>();privatefinalAtomicIntegercounter=newAtomicInteger(0);无锁并发,基于硬件指令
java.util.concurrent.atomic包:AtomicInteger,AtomicReference,AtomicStampedReference(解决 ABA 问题)✅ 优点:高性能,无阻塞。
❌ 局限:不适合复杂逻辑。
从架构层面规避竞争
ConcurrentHashMap将数据分段加锁。CopyOnWriteArrayList)。