申し訳ありませんが、メソッドsynchronized内のブロックsync()が同期されているオブジェクトを理解できません:
public class TestLambda {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
try {
sync();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
static void sync() throws InterruptedException {
synchronized ((Runnable)TestLambda::new) {
System.out.println("inside");
Thread.sleep(1000L);
}
}
}
メソッド参照オブジェクトの場合、なぜ私は単に書くことができないの
synchronized (TestLambda::new)ですか? (コンパイル時エラーになります)。
何か案は?
UPD:念のため:実際に同期されています
UPD-2 : 疑問に思っている人のために、簡単な例を示します。
C:\sandbox\research\learn8\src>"C:\Program Files\Java\jdk1.8.0_31\bin\"javac TestLambda.java
TestLambda.java:27: error: method reference not expected here
public class Test { { synchronized (Test::new) { System.out.println("sync"); } } }
^
1 error