질문 너무 많이 올려서 죄송합니다
이게 마지막질문인데 요거까지만 답변좀 부탁드려요
805페이지 synchronizedList 질문 있습니다
synchronizedList가 쓰레드에 안전한것까지는 직접확인했는데
한가지 안풀리는게 있어요
질문.1
일단
synchronizedList 돌리면 쓰레드에 안전하니 굳이 동기화처리를 안해도 지가 알아서
[1, 2, 3, 4, 5, yes]
[1, 2, 3, 4, 5, yes, yes]
이렇게 뜨는건 이해했습니다
문제는 첨부파일에서
컴파일하면 (그냥 리스트 쓸때)
[1, 2, 3, 4, 5, yes, yes]
[1, 2, 3, 4, 5, yes, yes]
이렇게 뜨거든요.
근데 한번정도는 그냥 리스트로해도
[1, 2, 3, 4, 5, yes]
[1, 2, 3, 4, 5, yes, yes]
이게 떠줘야되는데 엄청 많이 돌려봐도 안뜹니다.
원래 떠야되는게 맞는데 제가 운이없어서 안뜬건지 궁금합니다
int경우에는 아주 잘떠주는데 제가 모르는 무언가가 있는지 궁금합니다
그냥 리스트로 했을때도
[1, 2, 3, 4, 5, yes]
[1, 2, 3, 4, 5, yes, yes]
이게 한번떠주면 모든 궁금증 해결인데 이게 문제에요
질문2.
for(PrintWriter w : list){
w.println(message);
w.flush();}}}
여기서 critical section 에 문제가 생기는 것중 하나가 이런경우가 맞는지 궁금하고
동기화해야하는 이유가 맞는지 궁금합니다
유저1, 유저2가 (동기화되지않은 출력스트림)list에 동시 접근해서 sendAll로 메세지를 전달하면 이게 뒤죽박죽이 되서
유저1, 유저2, 유저3이 화면에 출력받는 모든 메세지의 순서가 다를수가 있기때문
유저1화면 유저2화면 유저3화면
A:안녕 B:hi A:안녕
B:hi A:안녕 B:hi
동기화 해야하는이유
유저1화면 유저2화면 유저3화면
A:안녕 A:안녕 A:안녕
B:hi B:hi B:hi