본문 바로가기

카테고리 없음

자바 멀티 쓰레드 사용기

728x90
반응형

1. Thread를 상속받는 방법(extends)

 

2. Runnable을 상속받는방법(implements)

 

 

쓰레드를 실행 시킬때 run()이 아닌 start()를 호출했다는게 의문이 들것이다.

run()메소드는 된 메소드를 호출해서 사용하는 것으로 생각하면 된다.

start()메소드는 새로운 쓰레드가 작업을 실행하는데 필요한 호출스택(공간)을 생성한 다음

run()을 호출해서 그 안(스택)에 run()이 저장되는 것이다.

 

즉, 쓰레드를 사용하기 위해 start()를 실행시키는 순간 쓰레드만의 독립적인 작업 공간인 호출스택이 만들어지는 것이다. 그 후에 호출 스택안에 각 실행하고자 하는 예를 들면 run()과 같은 메소드들이 저장되는 것이다.

호출 스택에 있는 내용들이 모두 수행하고 나면 쓰레드는 호출스택 공간과 함께 메모리 상에서 소멸된다.

 

참고로 방법 1,2 모두 행동을 정의해야할 메소드명은 run()이다.

 

*쓰레드를 사용할 때 매개변수를 사용하고 싶었는데....

 

(before)

Runnable r = new example();

Thread t = new Thread(r);

======================

(after)

Thread t = new Thread(new example(5, "hello"));

 

이런방식으로 매개변수를 넘길 수 있다.

 

출처 : https://itdexter.tistory.com/133

 

Java - Thread, (run()메소드, start()메소드의 차이)

쓰레드를 말하기 전에 프로세스에 대해서 알 필요가 있다. 프로세스란 무엇일까? 실행 중인 프로그램을 프로세스라고 한다. 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고..

itdexter.tistory.com

 

추가(2/1)

- Runnable은 인터페이스이므로 extends와 중복하여 사용가능

- Thread는 클래스이므로 extends 사용시 다른 클래스 상속 불가능

 

-notify()는 1개의 쓰레드를 꺠우고, notifyAll()은 모든 잠들어 있는 쓰레드를 깨운다.

 

-wait() , notify()를 활용한 쓰레드 제어를 만들시, run()을 개별적으로 만들고 실행한다.

 

t1, t2라는 쓰레들 2개를 만들었다.

 

출처 : https://www.youtube.com/watch?v=gx_YUORX5vk

728x90
반응형