Java

[Java]_Thread 쓰레드

Ellie67 2021. 3. 22. 11:06

프로세스(Process)란? 

-실행 중인 프로그램(Program)

-프로그램을 실행하면  OS로부터 자원(메모리)을 할당받아서 프로세스가 된다.

 

 

쓰레드(Thread)란?

-프로세스의 자원을 이용해서 실제로 작업을 수행하는 것

 

 

대부분의 OS는 멀티태스킹을 지원한다-> 여러 개의 프로세스 동시에 실행 가능

 

 

CPU의 코어는 단 한 개의 작업만 수행할 수 있기 때문에 실제로 동시에 처리되는 작업의 개수는 코어의 개수와 같다.

(각 코어가 아주 짧은 시간 동안 여러 작업을 번갈아 가면서 수행)

 

 

멀티쓰레드의 장점

-CPU 사용률 향상

-자원 효율적으로 사용

-사용자에 대한 응답성 향상

-작업 분리로 코드 간결

 

 

멀티쓰레드 => 우리가 메신저에서 사진을 다운받으면서 채팅을 할 수 있는 이유

 

 

쓰레드 구현

-Runnable 인터페이스 구현

-Thread 클래스 상속 받기

=> Runnable 인터페이스 구현하는 것이 일반적인 방법이다.(Thread 클래스를 상속받으면 다른 클래스를 상속 받을 수 없기 때문이다.)

 

package com.company;

public class Main{

    public static void main(String[] args) {
	   ThreadEx1_1 t1 = new ThreadEx1_1();

	   Runnable r = new ThreadEx1_2();

        Thread t2 = new Thread(r);

        t1.start();
        t2.start();
    }
}
class ThreadEx1_1 extends Thread{
    public void run(){
        for(int i =0; i<5; i++){
            System.out.println(getName());
        }
    }
}
class ThreadEx1_2 implements Runnable{
    public void run(){
        for(int i =0 ; i<5; i++){
            System.out.println(Thread.currentThread().getName());
        }
    }
}

 

Thread 클래스를 상속 받으면 자손 클래스에서 Thread 클래스의 메소드를 직접 호출할 수 있지만

 

Runnable 인터페이스를 구현한 클래스는 Thread 클래스의 static 메소드인 currentThread()를 호출하여 쓰레드에 대한 참조를 얻어와야 호출가능하다.

 

쓰레드를 실행할 때는 run()이 아닌 start()를 호출해야 한다.

 

[Java]_Thread start()와 run()

Java의 정석 3판 쓰레드 실행시킬 때 왜 run()이 아닌 start()를 호출할까? main 메소드에서 run()을 호출하는 것은 쓰레드를 실행하는 게 아니라, 단순히 클래스에 선언된 메소드를 호출하는 것이다. sta

ellie67.tistory.com

 

'Java' 카테고리의 다른 글

[Java]_Thread start()와 run()  (0) 2021.03.22