0. 설명

만약에  3개의 메소드가 동시에 호출이된다면??,,,,, MusicBox내부가  고장이 난다면....

어떻게 해야 할 까요??

 

 

 

해결 할 수 있는 방법으로는 

 

 

 

한가지 메소드가 사용 될 때, 다른 메소드는 사용하지 못하도록 대기를 시켜야 합니다.

그러고 나서,

해당 메소드가 작업할 것을 모두 다 끝나면,

대기하던 다른 메소드가 실행되도록,

 

 

만들어주면 됩니다!!!

 

 

 

 


 

 

 

https://hijjang2.tistory.com/616

 

여기서, 실행 결과를 보면,

 

순서대로 실행되는 것이 아니라,

 

"카페음악!!!"

"슬픈음악!!!"

"신나는음악!!!"

"신나는음악!!!"

..

 

이렇게 뒤죽박죽으로 실행이 됩니다.

((참고)메소드가 이것저것 불리면,,,,, 뭔가 문제가 발생을 할 수가 있습니다)

 

 

이렇게 메소드가 "이것도 불렸다", "저것도 부렸다"한다면, 문제가 발생할 수가 있습니다.

 

 

 

 


 

 

 

그러면

synchronized

를 붙여 주시면 됩니다

 

 

 

 

 

 

 

 

 

 

1. synchronized 적용한거

 

여러개의 스레드들이 "공유객체의 메소드"를  사용할 때에,

메소드에 synchronize가 붙어 있을 경우에는,

0.000~초가 먼저 실행되는 것이

해당 객체의 사용권을 얻게 됩니다.

 

 

사용권을 얻는 다는게           ->             "모니터링락"이라고도 합니다

 

 

 

 

<코드>

<결과>

 

 

 

해당하는 메소드가 작업이 끝나야지 다음께 진행을 할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

2. synchronized 하나만 적용안하고, 다른건 다 한거

<코드>

<결과>

설명->

"카페 음악!!!"에다가만 synchronized를 안붙여 주었는데, 그냥 같이 동작을 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 메소드 전체에다가 synchronized를 붙여주는 것도 있지만,  해당하는 부분만  synchronized 주는 방법(블럭을 주어서)도 있습니다.