public class CoordinationTest{
public static void main(String[] args){
Buffer b = new Buffer();
Worm1 t1 = new Worm1(b);
Worm2 t2 = new Worm2(b);
Worm3 t3 = new Worm3(b);
t1.start();
t2.start();
t3.start();
}
}
위 소스를 실행하면 결과가 총 4개만 나옵니다.
제가 생각했던 것은 지금 계속 for문에서 각각 5개씩을 호출 하니깐 15개가 나와야 되는데. 4개만 나오네요.
그리고 worm이 3개가 있는데, 이 worm들이 동시에 동일한 셀에 있지 않게 하고 싶은데 잘 안되네요
출력하면
0번 셀로 worm1 이동
0번 셀로worm3이동
0번 셀로 worm2이동
1번 셀로 worm1 이동
이런 식으로 나오는데... 각 worm들이 동시에 동일한 셀에 있는 상태 입니다.
그러니깐 예를 들어서
0번 셀로 worm1 이동
1번 셀로 worm1이동
0번 셀로 worm2 이동
2번 셀로 worm3 이동
이런식으로 나오게 하고 싶은데...
첫번째 질문
왜 4개문 출력되는지 그리고
worm들이 동일한 셀에 있지 않게 하는 법...
Hit : 4761 Date : 2011/06/02 01:50
$Zero
while(전부)
부분이 문제입니다.
이곳은 스레드가 접근하면 무한루프를 돌게 되지요.
그럼 계속해서 무한루프를 돌기때문에 프로그램 진행이 안되는 것 입니다.
정확히 어떤 프로그램인지 잘 몰라서 조언만 해드리는데.. 문제는
각각의 while 문에서 무한루프에 빠지는 것입니다. .
무한루프에 빠지지 않도록 코드를 바꿔보세요. 4개 출력만 한것 같지만 4개를 출력한뒤 계속해서 cpu자원을 소모하고 있답니다(무한루프돌면서)
(사실 분석하기 귀찮았습니다... 혼자 해결해보세요 ~ 그게 더 공부가 되니)
2011/06/03
wnsan1004
질문 투척후 공부하는 저의 모습을 봐서, 답변 올립니다..
Zero님이 말했듯이, while문에서 무한 루프 돌기때문에, 각각의 while 문 안에 break; 를 두어, 무한루프를 방지 해야합니다.
그리고 각벌레의 이동이 0방부터 5방까지 순서대로 움직이지 않게 하기 위해선,
Thread.Sleep()값을 증가 시키면, 됩니다. sleep값이 작은 관계로, 동시에 시작되는 다른 쓰레드가 빨리 읽혀지기때문에, 순서대로 읽혀지는것 "처럼"보이는 것뿐입니다.