하나의 프로세스 안에서 두 가지 이상의 일을 하도록 하는 것
스레드 스케줄링
1. 스레드가 몇 개 존재하는지
2. 스레드가 실행되는 프로그램 코드의 메모리 위치가 어디인지
3. 현재 스레드의 상태는 무엇인지
4. 스레드의 우선순위는 몇인지
- 자바 스레드로 작동할 작업이 무엇인지 코드로 작성
- 스레드 코드가 실행할 수 있도록 JVM한테 요청
1) Thread 클래스 상속
2) Runnable 인터페이스 구현
방법1. Thread 클래스 상속
class T1 extends Thread{
public void run(){
//작업할 내용
}
}
방법2. Runnable 인터페이스 구현
class T2 implements Runnable{
public void run(){ //run()메서드 오버라이딩
// 작업할 내용
}
}
방법1. Thread 클래스를 상속받은 클래스
Th1 t1 = new Th1(); //인스턴스 생성
t1.start();
방법2. Runnable 인터페이스 구현한 클래스
Th2 t2 = new Th2(); //인스턴스 생성
Thread t = new Thread(t2) //Thread 클래스의 매개변수 생성자에 인자값으로 전달
t.start();
3개의 스레드(메인, Thread 클래스, Runnable인터페이스)가 동시에 작업을 실행하는 코드
→ 메인도 스레드다!
public static void main(String[] args) {
//JVM 스레드 요청
//1) Thread 클래스 상속받은 클래스의 스레드를 요청
MyThread th1 = new MyThread();
th1.start();
//2) Runnable 인터페이스를 구현한 클래스의 스레드를 요청
MyThread2 th2 = new MyThread2();
Thread t = new Thread(th2); //Thread(Runnable target)
t.start();
for(int i=0;i<10;i++) {
System.out.println("메인 함수 진행 중" + i);
}
}
}
//방법1. Thread 클래스를 상속받아 작업을 구현
class MyThread extends Thread{
//run() 메서드 오버라이딩(재정의)
public void run() {
//스레드가 해야할 작업 구현
for(int i=0;i<10;i++) {
System.out.println("스레드 진행 중 " + i);
}
}
}
//방법2. Runnable 인터페이스를 구현하여 작업을 구현
class MyThread2 implements Runnable{
@Override
public void run() {
for(int i=0;i<10;i++) {
System.out.println("러너블 진행 중 "+i);
}
}
}