0. 설명
만약에 3개의 메소드가 동시에 호출이된다면??,,,,, MusicBox내부가 고장이 난다면....
어떻게 해야 할 까요??
해결 할 수 있는 방법으로는
한가지 메소드가 사용 될 때, 다른 메소드는 사용하지 못하도록 대기를 시켜야 합니다.
그러고 나서,
해당 메소드가 작업할 것을 모두 다 끝나면,
대기하던 다른 메소드가 실행되도록,
만들어주면 됩니다!!!
https://hijjang2.tistory.com/616
여기서, 실행 결과를 보면,
순서대로 실행되는 것이 아니라,
"카페음악!!!"
"슬픈음악!!!"
"신나는음악!!!"
"신나는음악!!!"
..
이렇게 뒤죽박죽으로 실행이 됩니다.
((참고)메소드가 이것저것 불리면,,,,, 뭔가 문제가 발생을 할 수가 있습니다)
이렇게 메소드가 "이것도 불렸다", "저것도 부렸다"한다면, 문제가 발생할 수가 있습니다.
그러면
synchronized
를 붙여 주시면 됩니다
1. synchronized 적용한거
여러개의 스레드들이 "공유객체의 메소드"를 사용할 때에,
메소드에 synchronize가 붙어 있을 경우에는,
0.000~초가 먼저 실행되는 것이
해당 객체의 사용권을 얻게 됩니다.
사용권을 얻는 다는게 -> "모니터링락"이라고도 합니다
<코드>
<결과>
해당하는 메소드가 작업이 끝나야지 다음께 진행을 할 수 있습니다.
2. synchronized 하나만 적용안하고, 다른건 다 한거
<코드>
<결과>
설명->
"카페 음악!!!"에다가만 synchronized를 안붙여 주었는데, 그냥 같이 동작을 합니다.
3. 메소드 전체에다가 synchronized를 붙여주는 것도 있지만, 해당하는 부분만 synchronized 주는 방법(블럭을 주어서)도 있습니다.
'■ JAVA > Study' 카테고리의 다른 글
[JAVA] 스레드 - 6-2.스레드와 상태제어 (join) - "스레드가 멈출 때(끝날때?)까지 기다리게 해주는 메소드" (0) | 2020.04.29 |
---|---|
[JAVA] 스레드 - 6-1.스레드와 상태제어 설명 (0) | 2020.04.29 |
[JAVA] 스레드 - 4.스레드 + 공유객체 ★ (0) | 2020.04.29 |
[JAVA] 스레드 - 3.Runnable인터페이스를 사용해서 만드는 방법(implements Runnable)★ (0) | 2020.04.29 |
[JAVA] 스레드 - 1.설명, 2.상속해서 만드는 방법(extend Thread)★ (0) | 2020.04.29 |