記錄

JAVA) Thread 본문

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");
    }

}




'Computer language > JAVA' 카테고리의 다른 글

JAVA) HashMap에서의 순서  (0) 2018.02.21
JAVA) HashMap의 value들을 ArrayList에 넣기  (0) 2018.02.21
JAVA) 직렬화  (0) 2018.02.20
JAVA) CMD내 TREE 기능 구현  (0) 2018.02.19
JAVA) Map.Entry와 entrySet()  (1) 2018.02.14
Comments