우리는 채팅창에서 대화를 주고 받으면서 동시에 채팅창에 사진을 올려 공유할 수도 있다. 이처럼 동시에 여러 작업을 할 수 있는 것은 무엇 때문일까? 바로 쓰레드 덕분이다.
그렇다면 쓰레드란 무엇일까? 이제 알아보도록 하자.
쓰레드란?
· 프로세스 내에서 자원을 이용하여 작업을 수행하는 것.
· 별도의 호출 스택(call stack)이 있다는 것을 의미.
멀티 쓰레딩
· 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것.
· 실제로는 한 개의 CPU가 한 번에 한 가지의 작업만 할 수 있기 때문에 아주 짧은 시간 동안 여러 작업을 번갈아 가며 수행함으로써 여러 작업이 동시에 수행되는 것처럼 보이게 하는 것.
멀티 쓰레딩의 장점
· CPU의 사용률을 향상 시킴.
· 자원을 보다 효율적으로 사용할 수 있음.
· 사용자에 대한 응답성이 향상됨.
· 작업이 분리되어 코드가 간결해짐.
※ 프로세스의 성능이 쓰레드의 개수에 비례하지는 않음.
멀티 쓰레딩의 단점
잘못하면 교착상태(Deadlock)의 빠질 수 있음.
※ 교착상태란 두 쓰레드가 자원을 점유한 상태에서 서로 다른 쓰레드가 점유한 자원을 사용하려고 기다리느라 실행이 멈춰있는 상태.
쓰레드 구현하는 방법
· Thread 클래스를 상속 받는 방법
· Runnable 인터페이스를 구현하는 방법
Thread 클래스를 상속 받는 방법
public class MyThread extends Thread{
@Override
public void run() {
// Thread 클래스의 run()을 오버라이딩
}
}
public class MyThreadTest {
public static void main(String[] args) {
MyThread th = new MyThread();
th.start();
}
}
Runnable 인터페이스를 구현하는 방법
public class MyThread implements Runnable {
@Override
public void run() {
// Runnable 인터페이스의 추상메서드인 run()을 구현
}
}
public class MyThreadTest {
public static void main(String[] args) {
Runnable r = new MyThread();
Thread th = new Thread(r);
th.start();
}
}
※ Runnable 객체와 Thread 객체의 관계는 작업과 일꾼 사이의 관계와 같음. Runnable 객체에 Thread에서 실행시킬 작업이 들어있음.
※ 쓰레드를 실행시킬 때 왜 run()이 아닌 start()일까? run()을 호출하는 것은 쓰레드를 실행시키는 것이 아니라 단순히 클래스에 속한 메서드를 호출하는 것이다. 따라서 쓰레드의 작업을 실행하는데는 start()를 사용한다.
[참고] 자바의 정석
[참고] Head First 자바
'프로그래밍 > Java' 카테고리의 다른 글
쓰레드(Thread) 3 (0) | 2017.11.20 |
---|---|
쓰레드(Thread) 2 (0) | 2017.11.04 |
컬렉션 프레임워크(Collection Framework)란? (0) | 2017.09.01 |
throw와 throws 비교 (0) | 2017.08.28 |
에러(error)와 예외(exception) (0) | 2017.08.27 |
WRITTEN BY
- 김치치즈스마일
세계정복!