package util;
public class Singleton2 {
private Singleton2() {}
public static MySqlManager getInstance(){
return LazyHolder.manager;
}
private static class LazyHolder{
private static final MyClass manager = new MyClass();
}
}
원래 목적은 Thead Safe 클래스를 만드려고 했다.
좋아. .Net과 동일하게 Lazy 싱글턴을 만들었으니, 이제 제네릭화 시켜야지! 했는데....
자바 제네릭은 T 타입이 Static에선 정의할 수 없다고 한다.
그래서 내 나름대로 변경해서 했는데.. 성능이 좋진 못할거 같은 코드. -..-
package util;
public class Singleton{
private volatile static Object instance;
private Singleton(){}
public static <T> T getInstance(Class<T> cls){
if(instance == null){
synchronized (Singleton.class){
if(instance == null) {
try {
instance = cls.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
return cls.cast(instance);
}
}
자바를 다시 본지 3일? 정도 밖에 되지 않아 인지부조화가 온다.
@GetMapping(value = "/helloworld/string")
@ResponseBody
public String helloworldString() {
MyClass my = Singleton.getInstance(MyClass.class);
my.Test = 1;
System.out.println(my.Test);
MyClass obj2 = Singleton.getInstance(MyClass.class);
obj2.Test = 2;
System.out.println(obj2.Test);
return "helloworld";
}
테스트 해보니, 제대로 동작하긴 한다.
원래 짜려고 했던 닷넷 컨버팅 모드.
public class LazySingleton<T> where T : new()
{
private static readonly Lazy<T> instance = new Lazy<T>(() => new T(), System.Threading.LazyThreadSafetyMode.PublicationOnly);
public static T Instance { get { return instance.Value; } }
private LazySingleton() { }
}
'Java' 카테고리의 다른 글
자바 Rest api2 (0) | 2020.07.16 |
---|---|
자바 Rest api (0) | 2020.07.06 |
인텔리제이 톰캣 연결 (0) | 2020.07.01 |
인텔리제이 스프링부트 오류 (0) | 2020.07.01 |
인텔리제이 세팅 (0) | 2020.07.01 |