Java Programming

java의 synchronized 분석

tomato13 2008. 6. 27. 14:29

http://blog.naver.com/vanddang?Redirect=Log&logNo=10032009821

 

import java.util.HashMap;
import java.util.Map;

public class TwoMap {
    private Map map1 = new HashMap();
    private Map map2 = new HashMap();
   
    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 map1 = new HashMap();
    private Map map2 = new HashMap();
    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);
        }
    }
}