프로세스(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 |
---|