작업 스레드 생성과 실행
멀티 스레드로 실행하는 애플리케이션을 개발하기 위해서는 몇개의 작업을 병렬로 실행하지 결정하고 각 작업별로 스레드를 생성해야 한다.
모든 자바 애플리케이션 메인 스레드는 반드시 존재하기 때무에 메인 작업 이외에 추가적인 병렬 작업의 수만큼 스레드를 생성하여 이용하면 된다.
-
java.lang.Thread 클래스를 직접 객체화 해서 생성 가능
-
Thread클래스를 상속해서 하위 클래스를 만들어 생성 가능
Thread 하위 클래스로 부터 생성
작업 스레드가 실행할 작업을 Thread의 하위 클래스로 작업 스레드를 정의하여 작업 내용을 포함 할 수 있다.
Thread 클래스를 상속한 후 run()메소드를 재정의해서 스레드가 실행할 코드를 작성하면 된다.
public class WorkerThread extends Tread{
@Override //run() 메소드 재정의
public void run(){
스레드가 실행할 코드;
}
}
Thread thread = new WorkerThread();
아래와 같이 하면, 좀더 코드를 절약할 수 있다.
Thread thread = new Thread(){ //익명 자식 객체
public void run(){
스레드가 실행할 코드;
}
};
동일하게 start() 메소드를 호출하여 run()메소드를 실행한다.
thread.start();
예시1) 비프음 예시 - Thread 하위 클래스로 작업 스레드를 정의
비프음 들려주는 스레드
import java.awt.Toolkit;
public class BeepThread extends Thread {
@Override
public void run() {
// 스레드 실행 내용
Toolkit toolkit = Toolkit.getDefaultToolkit();
for (int i = 0; i < 5; i++) {
toolkit.beep();
try {
Thread.sleep(500);
} catch (Exception e) {
}
}
}
}
예시2) 비프음 예시 - 메인 스레드와 작업 스레드가 동시에 실행
public class BeepPrintEx {
public static void main(String[] args) { //메인 스레드
Thread thread = new Thread();
thread.start(); //run()메소드 실행
for (int i = 0; i < 5; i++) {
System.out.println("띵");
try {
Thread.sleep(500); // 0.5초 일시정지
} catch (Exception e) { // Thread가 들어간 문장은 반드시 예외처리를 해야한다.
}
}
}
}
예시3) Thread 익명 자식 객체 이용하기
import java.awt.Toolkit;
public class BeepPrintEx {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
// 스레드 실행 내용
Toolkit toolkit = Toolkit.getDefaultToolkit();
for (int i = 0; i < 5; i++) {
toolkit.beep();
try {
Thread.sleep(500);
} catch (Exception e) {
}
}
}
};
thread.start();
for (int i = 0; i < 5; i++) {
System.out.println("띵");
try {
Thread.sleep(500); // 0.5초 일시정지
} catch (Exception e) { // Thread가 들어간 문장은 반드시 예외처리를 해야한다.
}
}
}
}
생각보다.. 스레드가 너무 어려워서 진도가 잘안나간다.
확실히 책 뒤쪽이라 그런가, 이해도 어렵고.. 많이 진도가 안나간다.
※용어 정리
-
프로세스: 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션이 실행되는 것이다.
-
멀티 스레드: 하나의 프로세스 내에 동시 실행을 하는 스레드들이 2개 이상인 경우이다.
-
메인 스레드: 자바의 모든 애플리케이션은 메인 스레드가 main()메소드를 싱행하면서 시작한다. 메인 스레드는 main() 메소드의 첫 코드부터 아래로 순차적으로 실행하고, main()메소드의 마지막 코드를 실행하거나 return문을 만나면 실행이 종료 된다.
-
작업 스레드: 메인 작업 이외에 병렬 작업의 수만큼 생성하는 스레드를 말한다. 작업 스레드도 객체로 생성되기 때문에 크래스가 필요하다. Thread 클래스를 직접 객체화해서 생성할 수도 있고, Thread클래스를 상속해서 하위 클래스를 만들어 생성할 수도 있다.
본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 스레드5 (동기화 메소드) (0) | 2020.12.30 |
---|---|
자바(Java) - 스레드4 (스레드 이름) (0) | 2020.12.21 |
자바(Java) - 스레드2 (toolkit.beep(); 비프음 실행) (0) | 2020.12.15 |
자바(Java) -스레드1 (2) | 2020.12.10 |
자바(Java) - 예외 종류에 따른 처리 코드 (0) | 2020.12.07 |