synchronized 和 ReentrantLock 有什么区别?项目里该怎么选
synchronized 和 ReentrantLock 是 Java 并发里最常被放在一起比较的一组工具。只要聊到线程安全、锁竞争、并发控制,几乎都会有人问:它们到底有什么区别,项目里该用哪个。很多人也知道一些常见答案,比如:
Java
这里按页继续往后翻,仍然围绕接口变慢、数据库等待、线程池、JVM 与线上问题排查这些问题。
synchronized 和 ReentrantLock 是 Java 并发里最常被放在一起比较的一组工具。只要聊到线程安全、锁竞争、并发控制,几乎都会有人问:它们到底有什么区别,项目里该用哪个。很多人也知道一些常见答案,比如:
ThreadLocal 在 Java 项目里非常常见。很多人第一次接触它时,会觉得这是一个很优雅的工具:不用层层传参,也不用把上下文到处塞进方法签名里,只要把数据放进 ThreadLocal,当前线程里要用的时候随手就能拿到。这个思路本身没错,很多框架和项目也确实在大量使用它。
分布式锁几乎是后端工程里最容易被“默认正确”的工具之一。只要一看到“并发”“重复执行”“多节点同时处理”,很多人第一反应就是:上个分布式锁。它当然有用,但也特别容易被滥用。因为一旦把问题抽象得不够清楚,分布式锁很容易从“解决并发互斥”的工具,变成“什么都想靠它兜一下”的万能胶。