2021-08-27

0827 스레드의 join 메서드

 join메서드: 해당 스레드들이 종료할때까지 main이 기다린다.


1 . join()을 사용하지 않았을 경우 : main은 그냥 지할일만 하고 끝나버려서. calculate계산이 이루어지기도 전에 후다닥 끝나버린다;; 그래서 amount가 계속 0이 나왔다 ㅋㅋㅋ



2. join()수행시, 메인메서드가 해당 스레드 종료시까지 기다린다. 스레드두개가 일을 전부 마친후 메인이 종료되는 것을 확인할 수 있다.

3. 한가지 더 유의해야 할점은 - amount의 값이다.!!
둘다 1000번씩 더하는 메서드를 활용했으나 값은 2000이 되지 않는다 -
 왜냐하면, 덧셈연산은 사실
값을 더하고 ->  대입한다 
는 두가지 과정으로 이루어지는데, 
더하고 -> 에서 두 스레드가 경쟁하기 때문에, 대입하기도 전에 계속 연산이 이루어져서 2000보다 적은 값이 되어버린다!!!
-> 이러한 경쟁상태를 해결하기 위한 키워드가 synchronized이다!



synchronized 키워드를 붙인후 - 의도했던 결과를 얻을 수 있음을 확인!
-----------------------------------------------------------------------------------------------------

의문점 : lock하는 key오브젝트는 다 똑같아도 괜찮은 건가?? 아니면 synchronized키워드를 붙인 메서드 별로 다르게 설정해야 하는건가??
똑같이도 해보고 다르게도 해봤는데 둘다 2000으로 잘 나온다. 흠? 무슨 기준으로 다르게 lock거는거지?

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...