Do Not Think!!!

최근 사진

2011/12 시즌 2012년 2월 18-19일 용평리조트
2011/12 시즌 2012년 1월 27-28일 휘닉스파크
사무실 이사
2011/12시즌 2011년 12월 17일 휘닉스파크
2011/12시즌 2011년 12월 10일 휘닉스파크
2011/12시즌 2011년 12월 4일 휘닉스파크
2011/12시즌 2011년 11월 26일 휘닉스파크
2011년 8월 뉴질랜드 여행
2011년 5월 4일 ~ 7일 홍콩 워크샵 사람
2011년 5월 4일 ~ 7일 홍콩 워크샵 넷 째날

최근 트랙백

Total226676
Today5
Yesterday103
2007/07/11 11:48

Thread start() vs run() by 조영운

어제 하루종일 Thread 때문에 삽질을 했습니다.

Thread를 만들어서 실행시키는데,  Thread가 순차적으로 실행이 되는 문제였습니다.

오늘에서야 그 이유를 알았는데, 원인은 저의 무지 때문이었습니다.


별다른 생각 없이, 정말 아무 이유없이...

이클립스 자동완성 기능 사용 중, run()이 start() 보다 위에 있다는 이유때문에...
사용자 삽입 이미지

start()와 run()이 같은 동작을 하겠거니... 이런 생각에...

new Thread().run() 을 해버렸습니다.

어제 하루종일 start()와 run()의 차이점을 인식하지 못하고, 애꿎은 컴퓨터만 탓했습니다.



오늘에서야 start()와 run()이 다르다는 것을 인지하고, 두개의 차이점을 찾아봤습니다.

Thread.java - start() (Language : java)
public synchronized void start()
{
    if (vmThread != null || group == null)
        throw new IllegalThreadStateException();

    VMThread.create(this, stacksize);
}

Thread.java - run() (Language : java)
public void run()
{
    if (runnable != null)
        runnable.run();
}


start()는 실제 native 쓰레드(VMThread)를 생성하고, 새롭게 만들어진 native 쓰레드가 run()을 실행 하고, run()은 단지 Runnable 객체의 run()을 호출하는 것입니다.

즉, start()를 하기 전에는 new Thread()는 단지 하나의 객체일 뿐이고, start()를 해야만, 실제 쓰레드가 만들어지는 것입니다.



완전히 다르게 동작하는데, 이걸 똑같이 동작하다고 생각했었다니... 정말 창피합니다.


잘못된 코드 (Language : java)
new Thread().run()

수정한 코드 (Language : java)
new Thread().start()

크리에이티브 커먼즈 라이센스
Creative Commons License

Trackback Address :: http://dont.pe.kr/tt/trackback/79

  1. Bigstone 2007/07/11 16:17 댓글주소 수정/삭제 댓글쓰기

    이걸 글로 남겨 놓다니.. -_-a;;

    • 조영운 2007/07/11 18:02 댓글주소 수정/삭제

      머... 다음에 또 실수를 하지 말자는 의미지...

      꼭 까칠하게 따져야 하는가? ㅡ.ㅡa

Name

Password

Homepage

Secret