- Thread 클래스를 이용한 스레드 생성 방법
public class CreateThread extends Thread{
public void run(){ }
public static void main(String[] args){
CreateThread ct = new CreateThread();
ct.start();
}
}
두 스레드 생성방법은 Thread 클래스를 상속 받느냐, Runnable 인터페이스의 run 메소드를 오버라이딩 하느냐의 차이가 있지만 대부분 Runnable 인터페이스를 오버라이딩한다.
( 자바는 다중 상속지원X -> 다른 클래스를 상속받기 위해 )
- Runnable 인터페이스를 이용한 스레드 생성 방법
public class
CreateRunnable implements Runnable{
public void run(){ }
public static void main(String[] args {
CreateRunnable ct = new CreateRunnable();
Thread t = new Thread(ct);
t.start();
}
}
다른 스레드의 종료를 기다리는 메서드
스레드는 다른 스레드와 독립적으로 실행되는 것이 일반적이지만, 다른 스레드가 종료될 때까지 기다리다가 실행되야되는 경우가 발생할 수 있다.
예를 들어 A라는 스레드의 결과값을 가지고 B스레드에 적용시켜야 할때 사용할 수 있다.
public class SumThread extends Thread{
private long sum;
public long getSum() {
return sum;
}
public void setSum(long sum) {
this.sum = sum;
}
public void run() {
for(int i=1; i<=100; i++) {
sum+=i;
}
}
}
public class JoinExample {
public static void main(String[] args) {
SumThread sumThread = new SumThread();
sumThread.start();
try {
sumThread.join(); // sumThread가 종료될때까지 메인 스레드를 정지시킴
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("1 ~ 100까지의 합 : " + sumThread.getSum());
}
}
스레드 스케줄러
1. 멀티 스레드가 수행될때 순서를 결정
스레드 우선순위
Thread 클래스의 우선순위를 정하는 멤버변수
public synchronized void synchronizedMethod(){
//임계영역 코딩
}
-특정 블럭 동기화 방법
public void nomalMethod(){
synchronized( 동기화할 객체 또는 클래스명 )
//임계영역 코딩
}
}