我试图说服自己,clojure 确实比 java 更容易进行并发编程。
但我觉得 Clojure Refs/do-sync 与 java“同步”块几乎完全一样。然后我读了这个线程:Clojure STM (dosync) x Java 同步块
--- 我正在重新启动一个新线程,因为如果我在旧线程中发表评论,由于年龄较大,响应可能不高。
Michał Marczyk 在该线程中的第一条评论声称不同之处在于 java 同步块使用锁,而 Clojure 使用事务。我认为这种说法并没有触及问题的本质:在底层,事务仍然是通过锁来实现的。所以“java 使用锁”并不是 Clojure 更好的原因。
我认为真正的好处是 Clojure 事务自动管理锁,就像 DB 事务一样。这样,获取锁的顺序和执行事务的顺序由事务管理器决定,程序员不需要关心这些,而在java世界中,程序员必须显式选择使用哪个锁同步块,这会导致可能的死锁。例如,事务管理器可以使用两阶段锁定来避免死锁。
以上有意义吗?
谢谢杨