JVM에 의해 스케줄되는 실행 단위 코드 블록
- JVM이 OS의 역할
- 일반 스레드와 거의 차이가 없다.
- 자바에는 프로세스가 존재하지 않고 스레드만 존재한다.
- main 메서드 작업을 main 스레드에서 수행한다.
스레드를 통해 작업하고 싶은 내용을 run()
메서드에 작성
class ThreadExtendsClass extends Thread {
@Override
public void run() {
System.out.println(getName()); // 현재 실행중인 스레드 이름
try {
Thread.sleep(10); // 스레드를 0.01초 멈춤
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Thread implements Runnable {
..
public final String getName() {
return name;
}
..
}
class ThreadImplementsInterface implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public interface Runnable {
public abstract void run();
}
public class Application {
public static void main(String[] args) {
ThreadExtendsClass thread1 = new ThreadExtendsClass();
Thread thread2 = new Thread(new ThreadImplementsInterface());
thread1.start();
thread2.start();
// thread2.run();
}
}
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
private native void start0();
@Override
public void run() {
if (target != null) {
target.run();
}
}