java의 synchronized 분석
http://blog.naver.com/vanddang?Redirect=Log&logNo=10032009821
import java.util.HashMap;
import java.util.Map;
public class TwoMap {
private Map
private Map
public synchronized void put1(String key, String value){
map1.put(key, value);
}
public synchronized void put2(String key, String value){
map2.put(key, value);
}
public synchronized String get1(String key){
return map1.get(key);
}
public synchronized String get2(String key){
return map2.get(key);
}
}
위와 같이 함수 앞에 synchronized keywork를 붙일수도 있겠지만 경우에 따라서는 아래와 같이 세부적으로 sync영역을 지정해 주는 것이 보다 효과적이다.
package synch.two;
import java.util.HashMap;
import java.util.Map;
public class TwoMap {
private Map
private Map
private final Object syncObj1 = new Object();
private final Object syncObj2 = new Object();
public void put1(String key, String value){
synchronized (syncObj1) {
map1.put(key, value);
}
}
public synchronized void put2(String key, String value){
synchronized (syncObj2) {
map2.put(key, value);
}
}
public String get1(String key){
synchronized (syncObj1) {
return map1.get(key);
}
}
public synchronized String get2(String key){
synchronized (syncObj2) {
return map2.get(key);
}
}
}