Thread 생성하는 2가지 방법
# Thread 클래스로부터 직접 생성
java.lang.Thread 클래스로부터 작업 스레드 객체르 직접 생성하려면 다음과 같이 Runnable을 매개값으로 갖는 생성자를 호출애햐합니다.
Runnable은 작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체라고 해서 붙여진 이름이다.
Runnable은 인터페이스 타입이기 때문에 구현 객체를 만들어 대입해야한다.
Runnable에서는 run() 메소드 하나가 정의되어 있는데 구현 클래스는 run() 을 재정의 해서 작업 스레드가 실행할 코드를 작성해야 한다.
Runnable은 작업 내용을 가지고 있는 객체이지 실제 스레드는 아니다. Runnable 구현 객체를 생성한후,이것을 매개값으로 해서 Thread 생성자를 호출하면 비로소 작업 스레드가 생성된다.
코드를 좀더 절약하기 위해 Thread 생성자를 호출할 때 Runnable 익명 객체를 매개값으로 사용 할수 있다.
스레드는 생성되는 즉시 실행되는 것이 아니라, start () 메소드를 다음과 같이 호출해야만 비로소 실행된다.
start() 메소드가 호출되면 , 작업 스레드는 매개값으로 받은 Runnable의 run() 메소드를 실행하면서 작업 처리한다.
BeepPrintExample.java 에서 비프음을 발생하는 코드를 다음과 같이 작업 스레드 생성 및 실행 코드로 변형한다
BeepTesk 객체를 생성하고 이것을 매개값으로 해서 작업 스레드를 생선한다 작업 스레드이 start() 메소드를 호출하면 작업 스레드에 의해 BeepTask 객체의 run()메소드가 실행되어 비프음이 발생한다. 그와 동시에 메인 스레드는 7라인의 for문을 실행시켜 0.5초 간격으로 "띵"을 프린팅 한다
# Thread 하위 클래스로 부터 생성
작업 스레드가 실행할 작업을 Runnable로 만들지 않고 Thread의 하위클래스로 작업 스레드를 정의하면서 작업 내용을 포함시킬수 있다.
@overrider 를 통해서 메소드를 재정의 한다
start()메소드를 호출하면 작업 스레드는 자신의 run() 메소드를 실행하게 된다.
# 비프음을 들려주는 스레드 ( 실행될 스레드 내용)
작업 스레드 객체를 생성하고 실행한다.
start()메소드를 호출해서 BeepThread가 run() 메소드를 실행하도록 했다. 그와 도시에 메인 스레드는 for문을 실행시켜 0.5초 간격으로 "띵"을 프린팅 한다. 다음은 Thread를 대체하여 작업 스레드를 만들수 있는 또다른방법을 보여준다.
자자 정리를 하자면!
# 가장 일반적인 방법으로 Thread 클래스를 상속받는다.
다른 클래스를 상속하지 않을경우 사용
# Runnable 인터페이스를 implements 하는 방법
다른 클래스를 extends하여 Thread클래스를 상속하지 못 하는 경우에 Runnable을 구현하여 쓰레드를 생성
extends는 하나의 클래스에 한개만 가능하기 때문
인터페이스는 implements를 통하여 다중 상속도 가능하다는 장점,하지만 구현부가 없어 아무런 기능도 하지 않습니다 또한 내부 함수들을 모두 오버 라이딩 해주어야 함.
# 익명클래스를 이용하는 방법
이 방법은 쓰레드가 오직 한번만 수행 될때 사용하는 방법
한번 실행된 쓰레드는 재수행이 불가능
'JAVA' 카테고리의 다른 글
객체 생성과 클래스 변수 (0) | 2020.11.10 |
---|---|
객체와 클래스 (0) | 2020.11.10 |
다형성(Polymorphism) (0) | 2020.11.09 |
상속(InherItance) (0) | 2020.11.09 |
OOP (0) | 2020.11.09 |