[.NET vs JAVA] 쓰레드 동기화

고급 언어의 가장 알다가도 모를 이슈가 바로 쓰레드 동기화이다.
둘 다 Thread unsafe 의 경우는 반드시 발생을 하며, 특히 대량 처리로 인해 꼬이는 경우에 대해서는 유용하게 사용한다.
그럼 이 둘이 사용하는 동기화의 차이는 무엇일까?

결론부터 말하자면 차이점 없다. 기능 똑같다. 단지 구문만 틀릴 뿐.
자바의 경우 메소드에 synchronized 키워드를 붙일 수 있다.

public synchronized void doSomething(){
    //...
}

하지만 그래봤자 메소드 내용을 아래와 같이 처리하는 꼴이 된다.

public void doSomething(){
    synchronized(this){
        //...
    }
}

닷넷은 메소드에 동기화 키워드를 제공하지 않으며 구문으로만 제공한다.

public void DoSomething()
{
    lock(this)
    {
        //...
    }
}

그리고 임의의 private 객체 하나 지정해서 이를 사용해서 부분적인 동기화 작업을 수행하는 케이스가 대부분이다.
문제는 자바의 경우 메소드 동기화는 클래스 동기화나 다름없는데도 이를 이용하는 경우가 많다는 것이다.
물론 클래스 모두 동기화를 걸어서 일관적으로 수행하는 작업이라면 오히려 편리하지만,
그런 경우가 흔치 않기 때문에 오히려 동기화 방식은 구문 방법을 추천하고 싶다.
그 이유는 간단하다. 유연하고, 명확하며, 동기화가 필요한 부분에만 적용되어 더 빠른 처리를 제공할 수 있다.
특히 닷넷과 자바를 오가는 등의 폴리글랏 개발자라면 메소드 동기화보다 동기화 구문을 사용하자.
마이그레이션하기 존나 편할 것이다.

composite / 2015년 5월 7일 / Piss Development
태그:, , , , , ,

답글 남기기

Your email address will not be published / Required fields are marked *