シングル・モード---デッドロック
1529 ワード
単例モードを再温めると、面白いものが見つかり、デッドロックになります.まず,2つの単例beanがあり,互いに必要とする.
テストクラスを書いています
public class Sigton1 {
private Sigton2 sigton2;
private static Sigton1 sigton1 = null;
private Sigton1(Sigton2 sigton2) {
this.sigton2 = sigton2;
}
public static Sigton1 getInstance(){
if (null == sigton1) {
synchronized (Sigton1.class) {
Sigton2 instance = Sigton2.getInstance();
sigton1 = new Sigton1(instance);
}
}
return sigton1;
}
}
public class Sigton2 {
private Sigton1 sigton1;
private static Sigton2 sigton2;
private Sigton2(Sigton1 sigton1) {
this.sigton1 = sigton1;
}
public static Sigton2 getInstance(){
if (null == sigton2) {
synchronized (Sigton2.class) {
Sigton1 instance = Sigton1.getInstance();
sigton2 = new Sigton2(instance);
}
}
return sigton2;
}
}
テストクラスを書いています
@RunWith(SpringRunner.class)
@SpringBootTest
public class LearningApplicationTests {
@Resource
Executor asyncServerExecutor;
@Test
public void contextLoads() {
System.out.println("start");
asyncServerExecutor.execute(() -> {
Sigton1 instance = Sigton1.getInstance();
System.out.println(instance);
});
Sigton2 instance = Sigton2.getInstance();
System.out.println(instance);
}
}