클래스 인스턴스 하나만 만들고
그 인스턴스로 전역 접근 제공
하나뿐인 인스턴스로 관리하게 만듬.
인스턴스가 필요하다면 반드시 클래스 거치도록.
게으른 방식으로 생성?
클래스메소드로 인스턴스를 반환받을수 있다. 언제어디서든 접근가능
public class Counter {
private volatile int count = 0;
public void increment() {
count++;
}
public int getCount() {
return count;
}
}
이런 코드 예시에서
public class SharedData {
private volatile boolean flag = false;
public void setFlag(boolean value) {
flag = value;
}
public boolean getFlag() {
return flag;
}
}
public class ThreadA extends Thread {
private SharedData data;
public ThreadA(SharedData data) {
this.data = data;
}
@Override
public void run() {
while (!data.getFlag()) {
// do some work
}
System.out.println("ThreadA detected flag change.");
}
}
public class ThreadB extends Thread {
private SharedData data;
public ThreadB(SharedData data) {
this.data = data;
}
@Override
public void run() {
data.setFlag(true);
System.out.println("ThreadB changed flag.");
}
}
public class VolatileExample {
public static void main(String[] args) {
SharedData data = new SharedData();
ThreadA threadA = new ThreadA(data);
ThreadB threadB = new ThreadB(data);
threadA.start();
threadB.start();
}
}
public class CacheSingleton {
private static CacheSingleton instance;
private Map<String, Object> cache;
private CacheSingleton() {
cache = new HashMap<>();
}
public static synchronized CacheSingleton getInstance() {
if (instance == null) {
instance = new CacheSingleton();
}
return instance;
}
public void put(String key, Object value) {
cache.put(key, value);
}
public Object get(String key) {
return cache.get(key);
}
}