1. 스레드 (Thread)
프로세스를 구성하며 실제 작업이 수행되는 최소 실행 단위
2. 멀티 스레딩 (Multi-Threading)
3. Java Thread 생성하는 방법
4. Thread 클래스 상속
class MyThread extends Thread{
public void run() {
int i;
for(i = 0; i<200; i++) {
System.out.print(i + "\t");
}
}
}
public class ThreadTest {
public static void main(String[] args) {
System.out.println(Thread.currentThread()); # 현재 블럭에서 수행되는 스레드의 정보 출력
MyThread th1 = new MyThread();
th1.start();
MyThread th2 = new MyThread();
th2.start();
}
}
5. Runnable 인터페이스 구현
class MyThread2 implements Runnable{
public void run(){
int i;
for(i=0; i<200; i++){
System.out.print(i + "\t");
}
}
}
public class ThreadTest2 {
public static void main(String[] args) {
System.out.println("main start");
MyThread2 mth = new MyThread2();
Thread th1 = new Thread(mth);
th1.start();
Thread th2 = new Thread(new MyThread2());
th2.start();
Thread th3 = new Runnable() { # 익명 클래스로 구현
public void run(){
int i;
for(i=0; i<200; i++){
System.out.print(i + "\t");
}
}
};
th3.start();
System.out.println("main end");
}
}
1. Thread 우선순위
2. Thread 우선순위 적용
class PriorityThread extends Thread{
public PriorityThread(String name) { # 생성자에서 스레드 이름 지정
super(name);
}
public void run(){
int sum = 0;
Thread t = Thread.currentThread();
System.out.println( t + "start");
for(int i =0; i<=1000000; i++){
sum += i;
}
System.out.println( getName() + " end");
}
}
public class test {
public static void main(String[] args) {
PriorityThread pt1 = new PriorityThread("A");
PriorityThread pt2 = new PriorityThread("B");
PriorityThread pt3 = new PriorityThread("C");
pt1.setPriority(1);
pt2.setPriority(5);
pt3.setPriority(10);
pt1.start();
pt2.start();
pt3.start();
}
}
1. 스레드 join 메서드
2. join 메서드 사용
public class JoinTest extends Thread{
int start;
int end;
int total;
public JoinTest(int start, int end){
this.start = start;
this.end = end;
}
public void run(){
int i;
for(i = start; i <= end; i++){
total += i;
}
}
public static void main(String[] args) {
JoinTest jt1 = new JoinTest(1, 50);
JoinTest jt2 = new JoinTest(51, 100);
jt1.start();
jt2.start();
try{
jt1.join(); # jt1 스레드가 종료되어야 main 스레드 수행 재개
jt2.join(); # jt2 스레드가 종료되어야 main 스레드 수행 재개
}catch (InterruptedException e) { # jt1 또는 jt2 스레드가 종료되지 않을 경우 예외
System.out.println(e);
}
int lastTotal = jt1.total + jt2.total;
System.out.println("jt1.total = " + jt1.total);
System.out.println("jt2.total = " + jt2.total);
System.out.println("lastTotal = " + lastTotal);
}
}
1. Thread 인터럽트 (Interrupt)
2. Thread 종료