我试图说服自己,对于并发编程,clojure确实比java更容易。
但是我觉得Clojure Refs/do-sync与java“同步”块几乎完全相同。然后我读了这个帖子:Clojure STM ( dosync ) x Java synchronize block
--我正在重新启动一个新的线程,因为如果我在旧的帖子中评论的话,由于年老,响应可能不会很高。
MichałMarczyk在该线程中的第一个注释声称,diff是java同步块使用锁,而Clojure使用事务。我认为这个声明并没有触及问题的本质:在底层,事务仍然是通过锁实现的。因此,"java使用锁“并不是Clojure更好的原因。
我认为真正的好处是Clojure事务自动管理锁,就像DB事务一样。这样,获取锁的顺序和播放事务的顺序由事务管理器决定,因此程序员不需要关心这一点,而在java世界中,程序员必须显式地选择用于同步块的锁,这会导致可能的死锁。例如,事务管理器可以使用两阶段锁定来避免死锁。
以上这些有意义吗?
谢谢杨
发布于 2013-04-17 20:19:27
Clojure中的Ref是一种不同的并发抽象,它的工作方式类似于数据库事务--它具有原子性、一致性和隔离性。它构建在JVM锁定机制之上,因此可以自己在Java中实现它。我们之所以不这样做,是因为Ref类机制需要预先实现其他重要的机制:
https://stackoverflow.com/questions/16068448
复制相似问题