자바 run()과 start() 의 관계
글쓴이: dnking2 / 작성시간: 화, 2019/01/15 - 3:18오후
public class A extends Thread { int count = 0; public void run(){ System.out.println("run"); synchronized (this) { for(int i =0; i < 50 ; i++){ count = count + i; } } } }
-----------------------------------------
public class Test { public static void main(String argv[]) { A a = new A(); a.start(); synchronized (a) { System.out.println("wating"); try{ a.wait(); }catch(InterruptedException e){ } System.out.println(a.count); } } }
-----------------------------------------
코드 결과 값은
wating
run
1225
입니다.
그런데 제가 이해가 되지 않는 부분은,
start() 를 할 때 왜 run() 이 실행되지 않았냐는 것입니다.
제가 너무 단편적으로 외워 그런지 어렵네요..
Forums:
kldp에 들여쓰기 제대로 나타나게 글 쓰는 방법
kldp에 들여쓰기 제대로 나타나게 글 쓰는 방법
code 태그를 쓰세요.
https://kldp.org/node/158191 참고...
세벌 https://sebuls.blogspot.kr/
수정하였습니다 감사합니다
수정하였습니다
감사합니다
실행이 잘 된 것 같은데요
그냥 스레드 내부의 println이 메인 스레드의 println보다 늦게 실행된 듯 합니다.
a.wait()는 a가 종료될때까지 메인 스레드의 작동을 멈추게 해주는 메소드입니다.
그래서 a.start()가 아니고서야 run()을 가동할만한 라인이 없습니다.
즉 start()에서 run()은 제대로 실행됐지만
메인 스레드의 진행이 a보다 더 빨라서 waiting이 run보다 먼저 나온 것에 불과한 것 같습니다.
제대로 확인해보려면 메인 스레드의 println 위에 잠깐 sleep을 시켜보면 되겠죠.
댓글 달기