:
(def someObject ...)
(locking someObject
;; critical section)
locking
マクロ翻訳され
へ:
(let [lock someObject]
(try
(monitor-enter lock)
;; critical section
(finally
(monitor-exit lock))))
Javaの同等はキーワードです:
Object someObject = ...;
synchronized (someObject) {
// critical section
}
または上の同期別のフォームthis
リファレンス:
と同等です
public synchronized void someMethod() {
// critical section
}
:あなたは、クラスオブジェクトで同期することができます
public void someMethod() {
synchronized (this) {
// critical section
}
}
:
public class SomeClass {
public static synchronized void someMethod() {
// critical section
}
}
に相当する:
public class SomeClass {
public static void someMethod() {
synchronized (SomeClass.class) {
// critical section
}
}
}
Javaのキーワードでありますcom JVMのmonitorenter
とmonitorexit
バイトコード命令に積み重ねられています。 Clojureのmonitor-enter
とmonitor-exit
特殊形式は、同じバイトコード命令を使用します。