Computer language/JAVA
JAVA) Thread
surhommejk
2018. 2. 20. 12:31
CPU의 스케줄링 Priority 설정으로 간섭할 수는 있으나
전체적인 컨트롤은 불가능하다
//Thread : 프로세스에서 하나의 최소 실행단위 (method)
//Thread 생성방법
//1. Thread 클래스를 상속
//2. implements Runnable 구현
//두 방법 다 반드시 run() 추상함수 재정의
/*
Thread구현 방식이 둘 인 이유는
다중상속과 관련이 깊다
특정 클래스를 상속하면서도 Thread 기능을 구현하고 싶을 때
extends Thread만으로는 원하는 상속을 다 하지 못하므로
Runnable interface로도 Thread를 구현할 수 있게 한 것이다
또, 이와 연관되어
Thread 클래스가 추상클래스가 아니라 일반클래스인 이유는
Runnable 사용시 Thread 를 생성하고 파라미터로 넣어야 하는데
추상클래스라면 Thread를 생성하지 못하기 때문에
일반 클래스로 설계되어 있는 것이다
start()함수는 스택을 만들고 run()을 새로 만들어진 스택에 올리는 역할
스택에 올리고 나서 start()는 종료된다
*/
class Thread_1 extends Thread {
@Override
public void run() { // 새로운 stack 에 처음 올라가는 함수
for (int i = 0; i < 1000; i++) {
System.out.println("Thread_1 : " + i + this.getName());
}
System.out.println("Thread_1 run() END");
}
}
class Thread_2 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("Thread_2 : " + i);
}
System.out.println("Thread_2 run() END");
}
}
public class Ex02_Multi_Thread {
static int count = 0;
public static void main(String[] args) {
System.out.println("Main Start");
// 1번
Thread_1 th = new Thread_1();
th.start(); // .start()는 stack 생성하고 stack에 run() 올려놓고 사라진다
// 2번
Thread_2 th2 = new Thread_2();
Thread thread = new Thread(th2); // 일반 클래스
thread.start(); // .start()는 stack 생성하고 stack에 run() 올려놓고 사라진다
for (int i = 0; i < 1000; i++) {
System.out.println("main : " + i);
count++;
}
System.out.println("Main END");
}
}