티스토리 뷰

Java

Run vs Start in Java Thread

§무명소졸§ 2020. 5. 22. 09:45

Run() VS Start()

쓰레드의 Run 메서드와 Start메서드 둘 다 뭔가를 실행 시키는 느낌의 단어이기 때문에 했갈린다. 쓰레드를 이용한 코딩을 자주 하지 않는 입장에서 혼란스럽기도 하고 차이점을 잘  잊어 버려서 한번 정리하려고 한다.

Start() 메서드를 사용해라. Run()을 사용하면 안된다. 

결론부터 말하면 그렇다. 인텔리J와 같은 IDE에서는 아래 그림처럼 Suggestions 을 해 주기도 한다.

아래는 2초 간격으로 1부터 10까지 숫자를 출력하는 쓰레드를 Run으로 실행하는 코드이다. Run메서드를 실행해도 결과는 잘 나온다.

Output

위와 같이 결과가 잘 출력되는데 무엇이 문제인가? 이번에는 t.run()라인 밑에 출력문을 추가해서 다시 실행 해보겠다.

Output

1부터 10까지 잘 출력되고 마지막에 "end of code" 까지 잘 출력이 됐다. 잘 동작하는데....  뭔가 이상한 느낌이 든다.

아래는run() 메서드가 아닌 start()메서드로 변경해서 실행했을 때의 결과 화면이다. 

차이점이 분명하다. 이번에 코드를 조금 변경해서 2개의 쓰레드를 동시에 실행해 보겠다. 

Output

맨처음 메인 메서드의 현재 쓰레드를 한번 출력하고 그 이후에 쓰레드 내부에서 현재 쓰레드를 출력했다. t2쓰레드의 이름과
메인 메서드의  쓰레드명이 같다는걸 알수 있다. 결국 run 메서드를 실행하면 현재 실행하고 있는 메인함수의 쓰레드 위에서 동작하게 된다. 대부분 쓰레드를 이용하는 경우는 병렬처리를 위함인데 메인 쓰레드에서 동작하기 때문에 마지막 "end of code" 라인은 run으로 실행시킨 쓰레드가 종료되어야 출력되는 것이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크