join메서드: 해당 스레드들이 종료할때까지 main이 기다린다.
1 . join()을 사용하지 않았을 경우 : main은 그냥 지할일만 하고 끝나버려서. calculate계산이 이루어지기도 전에 후다닥 끝나버린다;; 그래서 amount가 계속 0이 나왔다 ㅋㅋㅋ
3. 한가지 더 유의해야 할점은 - amount의 값이다.!!
둘다 1000번씩 더하는 메서드를 활용했으나 값은 2000이 되지 않는다 -
왜냐하면, 덧셈연산은 사실
값을 더하고 -> 대입한다
는 두가지 과정으로 이루어지는데,
더하고 -> 에서 두 스레드가 경쟁하기 때문에, 대입하기도 전에 계속 연산이 이루어져서 2000보다 적은 값이 되어버린다!!!
synchronized 키워드를 붙인후 - 의도했던 결과를 얻을 수 있음을 확인!
-----------------------------------------------------------------------------------------------------
의문점 : lock하는 key오브젝트는 다 똑같아도 괜찮은 건가?? 아니면 synchronized키워드를 붙인 메서드 별로 다르게 설정해야 하는건가??
똑같이도 해보고 다르게도 해봤는데 둘다 2000으로 잘 나온다. 흠? 무슨 기준으로 다르게 lock거는거지?
댓글 없음:
댓글 쓰기