티스토리 뷰

Programming/Java

Synchronized

Albothyl 2016. 8. 15. 21:37

synchronized

 

여러 thread가 동시에 접근하는것을 막아주는 예약어이다.

 

synchronized 예약어가 붙으면 thread에서 해당 예약어가 붙은 메소드나 필드에 접근할 때 lock이 잡히고, lock이 풀릴때 까지 다른 thread가 접근할 수 없다.

 

synchronized는 성능을 저하시키므로 synchronized를 적용할때는 적용되는 부분을 최소화 해야 한다.

 

EX :

아래 예제는 synchronized가 어떻게 동작하는지 잘 보여주는 예제이다.


doA는 synchronized가 없이 t0, t1 쓰레드가 경쟁적으로 doA() 메소드를 호출한다.


doA를 주석처리하고 doB의 주석을 풀면 먼저 doB() 메소드를 점유한 쓰레드의 작업이 끝날때까지 다른 쓰레드가 doB() 메소드를 호출할 수 없다. 


synchronized가 적용되면 결과가 어떻게 달라지는지 확인할 수 있다.


synchronized 키워드는 예제처럼 메소드에 사용할 수 있고, synchronized {} 같이 코드의 특정 부분만을 block 형태로 사용할수도 있다. 상황에 맞게  사용하자.



'Programming > Java' 카테고리의 다른 글

Java Memory Structure  (3) 2016.08.20
Enum  (0) 2016.08.17
정렬 (Comparable, Comparator, Ordering)  (0) 2016.08.16
Serializable  (0) 2016.08.15
Equlas & HashCode  (0) 2016.08.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함