Thread 란?


1. 첫번째 방법은 Thread 클래스 상속하여 만들 수 있습니다.
package com.tenco.thread;
/**
* 기본 문법 복습
* 1. 상속을 사용해서 쓰레드를 만들 수 있다 (작업자 만들기)
*/
public class Worker extends Thread {
private String name;
public Worker(String name) {
this.name = name;
}
// 약속되어 있는 부분 run() 안에 해야할 일의 정의한다.
// start() 실행시키면 run() 안에 부분이 동작 한다.
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.print("worker " + name + " : " + i + "\n");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
package com.tenco.thread;
public class WorkerMain {
// 메인 쓰레드
public static void main(String[] args) {
// 사용하는 방법
System.out.println("---- main 쓰레드 시작 ----");
System.out.println(Thread.currentThread());
// 작업자 하나 만들어 내기 (만드는 일은 메인 쓰레드가 한다)
Worker worker1 = new Worker("워커1");
// 너가 위임 받은 일을 시작해
worker1.start();
System.out.println("---- main 쓰레드 종료 ----");
} // end of main
}
start()를 호출하면
JVM이 새 쓰레드를 만들고
새 쓰레드가 run() 안의 코드를 실행한다.
package com.tenco.thread;
// 쓰레드를 사용하는 문법
// 2번째. Runnable 인터페이스를 구현해서 쓰레드를 만들 수 있다.
public class Worker2 implements Runnable {
// run() -> 위임 시키고자 하는일 명시하는 곳
// 실행은 Thread().start() 로 호출해야 여기 부분이 일을 한다.
@Override
public void run() {
int i;
for(i = 0; i < 200; i++) {
System.out.print(i + "\t");
}
}
}
Thread 객체를 생성하고 생성자에 Runnable 타입을 넣어서 start() 메서드를 호출할 수 있다.
package com.tenco.thread;
public class WorkerMain2 {
public static void main(String[] args) {
System.out.println("main thread start");
Worker2 worker2 = new Worker2(); // 메인 쓰레드가 서브 쓰레드 생성
// worker2.start();
//orker2.run(); // run() 메서는 그냥 메서드를 호출할 뿐이지 쓰레드를 동작시킨건 아니다. 주의
// 익명 클래스
new Thread(worker2).start(); // 서브 작업자가 일을 시작 함
System.out.println("main thread end");
}
}
Runnable 인터페이스 안에는 핵심적으로 run() 메서드가 있다.
Thread t = new Thread(작업내용); 이렇게 정의 되있다 쓰레드 안에는
그리고 이 작업내용은 runnable타입만 들어갈 수 잇다