1. synchronized : 같은 자원(객체)에 접근할때, 경쟁상태로 인한 의도치않은 결과를 예방하기 위해 사용하는 키워드. 동시성 문제를 해결한다.
2. 메서드에 붙이거나, 블록에 붙일 수 있다. 블록에 붙일때는 lock할 키를 하나 넣어준다.
3. 메서드에 붙이면 개발자는 편하다(ㅋㅋ) 하지만 !!! 성능을 위해서는 블록 단위로 넣어주는 것이 좋다!! synchronized를 붙이는 순간 다른 스레드는 해당 연산에 접근할 수 없기 때문에- 그만큼 시간이 지연되기 때문이다.
4. 각기 다른 객체를 스레드 별로 할당하는 경우, 같은 클래스이지만 다른 인스턴스에 접근하기 때문에 동시성 문제는 일어나지 않는다.
이런 경우, 동시성 문제를 고려할 필요가 없다.
synchronized키워드를 지우고 다시 시도해보아도 - 의도한 결과가 나오는 것을 확인할 수 있다.
--------------------------------------------------------
여담)
왜 백엔드가 재미있는지 알것같다....!!
설계라는 하나의 예술? (ㅎㅎ)을 배우는 것이 재미있다.
여러 클래스가 협업하여 만들어내는 여러층의 레이어~~ 그것을 읽는 기쁨이랄지~~ 호호

댓글 없음:
댓글 쓰기