|
SSISO Community검색 |
|
SSISO Community메뉴 |
|
SSISO Community카페 |
|
블로그 카테고리 |
|
|
Synchronized로 검색한 결과 |
|
등록일:2008-03-03 10:42:22 작성자: 제목: 자바에서 synchronized()가 의미하는것은 무엇입니까...??? |
|
자바에서 Synchronized()가 의미하는것은 무엇입니까...???
소스코드가...
import java.net.*;
import java.io.*;
import java.util.*;
public class ChatServer{
Vector clientVector=new Vector();
int clientNum=0;
public void broadcast() throws IOException{
Synchronized(clientVector){
for(int i=0; i
ChatThread client=(ChatThread) clientVector.elementAt(i);
Synchronized(client){
client.sendMessage(msg);
};
};
};
};
.
.
.
};
인데요...여기서 'Synchronized(clientVector)'의 의미는 무엇입니까...???
답변 좀 부탁드립니다...
-------------------------------------------------------------------------------------------------
요새 통 프로그래밍을 손을 떼고 산지 오래되서..
코드를 보니 이해가 안가는 부분이 종종 있네요
책을 보고 쓴 코드이고, 오타가 없이 틀리지 않았다면
음... 제가 자바를 다시 공부해야 할듯 하네요...
우선 코드 내용중 부분적으로 이해하진 못했으나 님께서 궁금하신 부분은
Synchronized(clientVector)인데요
이건 이 작업 여기서 작업이란 clientVector가 사용중이면 접근 하지 못하게 기다리게 하는 걸로 기억하고 있습니다.
예를 들면 제 머리로는 코드가 좀 이상해서 이해할수가 없으나...
for(int i=0; i ChatThread client=(ChatThread) clientVector.elementAt(i);
이 부분에서 clientVector가 사용중이잖아요.
clientVector.elementAt(i) <-- 이렇게
이렇게 사용중일 경우 잠시 기다리게 하는걸로 .... 기억합니다.
마지막으로 한번더 쉽게 설명하자면 코드를 보니 네트웍 접속 프로그램인데요
Client가 clientVector에 추가가 되고 있는 그 상황!
그 상황에 누군가가 동시에 접속할시 clientVector.elementAt(i) <-- 이 부분에서
잘못하면 동시에 진행해버린 나머지 i가 0인데 i++해주기 전에 둘이 동시에
어! i가 0이네 그러면서 "그럼 난 clientVector.elementAt(0)을 해야지!" 하면서 둘이 동시에 clientVector.elementAt(0)을 해주는거죠
사용자는 둘인데 벡터는 0이 되는셈이죠.
아...뭐가 이상하나 했더니 저 for문이 좀 이상한거 같군요
i++이 부족해 보이고.. 어쨋든
사용자가 동시에 접속하는 경우가 있을수 있으므로 이렇게 코드에 추가해주곤 합니다. 제가 요새 공부가 부족해서 설명이 매우 허접한거 같은데요 Synchronized를
책에서 좀더 읽어보시면 제 설명과 혼합해서 생각해보시면 이해가 가실듯 합니다.
제 허접한 설명이 이해가 안가셨을수도 있겠죠.. 채택을 바라는건 아닙니다...
열씸히 공부하시기 바랍니다.^^
Ps. 제 설명에 문제 있는부분 있다면 -_- 의의제기 해주세요.
제가 요새 공부를 안해서 틀린 부분이 있을수도 있답니다...
출처 : 네이버 지식인 |
|
|
|
|
|