쓰레드의 구현과 실행
쓰레드의 구현과 실행
쓰레드를 구현하는 방법은 2가지가 있다.
Thread클래스를 상속하는 방법과, Runnable 인터페이스를 구현하는 방법이 있다.
어떤방법을 사용해도 상관은 없으나, 아무래도 인터페이스를 구현하는 쪽이 더 낫다.
상속을 받게되면, 자바는 단일상속만 허용하기 때문에 Thread클래스를 상속받으면 다른 클래스를 상속받기 어렵다.
그래서 인터페이스를 구현하는 쪽이 더 낫다. 다른 클래스를 상속받을 수도 있기 때문이다.
Runnable인터페이스는 이렇게 정의되어 있다. run() 메서드를 하나만 가지고 있는 인터페이스이고,
이 인터페이스를 구현한다는 것은, run()메서드를 완성해주면 된다.
Thread클래스를 상속 받는 방법이나, Runnable 인터페이스를 구현하는 방법이나,
결국, run()이라는 메서드를 구현해준다는 것은 똑같다.
run()메서드안에 작업내용을 넣어주면 된다.
우리가 지금까지 main()메서드에 작업할 내용을 적었는데 그것과 똑같은 것이다.
메서드 이름만 run()인 것 뿐이다.
그다음에는,
Tread클래스를 상속받는 방법의 경우,
쓰레드를 생성하고, start를 호출해서 쓰레드를 실행하면 된다.
Runnable 인터페이스를 구현한 경우,
Runnalbe인터페이스를 구현한 구현체를 생성한 다음에,
그것을 Thread() 생성자에 매개변수로 넣어준다. 쓰레드를 생성한 후,
start()를 호출해서 사용한다.
우리가 11장에서 sort를 배웠는데, sort(Comparator c) 가 외부에서 Comprator()라는 메서드에 구현된 정렬기준을 Comparator인터페이스를 통해 제공받는 것 처럼,
Thread(Runnalbe r) 도 run()이라는 메서드의 구현체를 외부에서 매개변수로 받는 것이다.
그래서 외부에서 제공한 run을 Thread()메서드가 호출하는 것이다.
[Ex13_1]
쓰레드의 실행 - start()
- 쓰레드를 생성한 후에 satrt()를 호출해야 쓰레드가 작업을 시작한다.
먼저 쓰레드를 생성하고, start()라는 메서드를 호출해야 쓰레드가 실행이된다.
t1과 t2를 실행시켰는데, t1을 먼저 실행시켰다. 그다음 t2를 실행시켰다.
start()했다고 바로 쓰레드가 실행되는 것은 아니다. 그래서 어느것이 먼저 실행될지 모른다.
t1이 먼저 start()했으니까 t1이 먼저 실행될 확률은 높지만, 반드시 그러한 것은 아니다.
왜냐하면, 쓰레드를 start()하면 실행가능한 상태가 되는 것이지, 바로 실행되는 것이 아니다.
언제 실행될지는 OS의 스케줄러가 결정한다.
start()와 run()
run() 을 작성했는데, 왜 start()를 호출하는 걸까?
1. 쓰레드생성
2. 쓰레드 실행
이렇게 두단계로 쓰레드를 생성해서 돌리는데,
우리기가 작성한건 run()인데 왜 start를 호출하냐면,
main()메서드에서 start()를 호출하면 호출스택이 아래와 같은 그림이 된다.
그러면 이 start()메서드가 어떤일을 하냐면,
새로운 호출스택을 생성한다.
그리고 그다음에 거기다가 run()을 올린다.
그러면 start()메서드는 할일을 다했으므로 종료가 된다.
그리고나면,
각각의 쓰레드가 자신만의 호출스택을 가지고 실행을 하는 것이다.
그래서 서로 독립적인 작업을 할 수 있는 것이다.
그래서 만약에, main()메서드에서 run()을 직접호출하면,
하나의 쓰레드에서 실행되는 것이다.
그래서 반드시 start()를 호출해서 새로운 호출스택이 생기고,
그위에 run()이 올라가도록 해야하는 것이다.
그래서 start()를 호출하는 것이다.
'JAVA' 카테고리의 다른 글
쓰레드의 우선순위, 쓰레드 그룹 (0) | 2022.06.12 |
---|---|
싱글 쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹 (0) | 2022.06.11 |
프로세스와 쓰레드, 멀티쓰레드의 장단점 (0) | 2022.05.29 |
애너테이션 타입 정의하기, 애너테이션의 요소 (0) | 2022.05.21 |
메타 애너테이션 (0) | 2022.05.11 |
댓글
이 글 공유하기
다른 글
-
쓰레드의 우선순위, 쓰레드 그룹
쓰레드의 우선순위, 쓰레드 그룹
2022.06.12 -
싱글 쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹
싱글 쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹
2022.06.11 -
프로세스와 쓰레드, 멀티쓰레드의 장단점
프로세스와 쓰레드, 멀티쓰레드의 장단점
2022.05.29 -
애너테이션 타입 정의하기, 애너테이션의 요소
애너테이션 타입 정의하기, 애너테이션의 요소
2022.05.21