[자바 디자인패턴 소스코드] Singleton Pattern
- Java/Java
- 2022. 5. 25. 00:02
싱글톤패턴
/**
* [싱글톤 패턴]
* 인스턴스가 오직 하나만 생성되는 것을 보장하고
* 어디서든 이 인스턴스에 접근할 수 있또록 하는 디자인 패턴
*
* as-is: Thread safe Lazy initialization (스레드 안전한 늦은 초기화)을 주석처리하고
* to-be: Initialization on demand holder idiom (holder에 의한 초기화) 로 변경
*
* to-be식 방법은 가장 많이 사용되는 방법이다.
* jvm은 class가 로드되는 시점에 원자성을 보장함.
*/
public class Singleton {
public static void main(String[] args) {
Bank bank1 = Bank.getBank();
Bank bank2 = Bank.getBank();
Bank bank3 = Bank.getBank();
Bank bank4 = Bank.getBank();
Bank bank5 = Bank.getBank();
Thread thread1 = new Thread(bank1);
Thread thread2 = new Thread(bank2);
Thread thread3 = new Thread(bank2);
Thread thread4 = new Thread(bank2);
Thread thread5 = new Thread(bank2);
thread1.start();
thread2.start();
thread3.start();
thread4.start();
thread5.start();
}
}
class Bank implements Runnable {
//private static Bank bank = null;
private static int no = 0;
private Bank() {}
static class LazyHolder {
static final Bank INSTANCE = new Bank();
}
public static Bank getBank() {
return LazyHolder.INSTANCE;
}
/*
public synchronized static Bank getBank() {
if(bank == null) {
bank = new Bank();
}
return bank;
}
*/
public void sendMoney(int amount) {
synchronized (this) {
no++;
System.out.println(no + ") " + this.hashCode() + " : " + amount);
}
}
@Override
public void run() {
sendMoney(1000);
}
}
'Java > Java' 카테고리의 다른 글
[자바 디자인패턴 소스코드] Command Pattern (0) | 2022.05.25 |
---|---|
[자바 디자인패턴 소스코드] State Pattern (0) | 2022.05.25 |
[자바 디자인패턴 소스코드] Strategy Pattern (0) | 2022.05.24 |
Set / Map (0) | 2019.08.16 |
Eclipse & Java 설치 (0) | 2018.09.28 |
이 글을 공유하기