프로세스와 쓰레드
프로세스(Process) 란?
- 실행 중인 하나의 애플리케이션
- 여러개의 쓰레드를 가지고 있을 수 있다
- 하나의 앱이 하나의 프로세스
쓰레드(Thread) 란?
- 하나의 프로세스가 두 가지 이상의 작업을 처리 할 수 있도록 해주는 기능
- 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있어 다른 스레드에 영향을 미치게 되므로 예외 처리 필수로 해야한다.
• 싱글 스레드
- 스레드가 1개 인것
• 멀티 스레드
- 스레드를 N개 이상 사용
- 실행중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다.
스레드 생성
Runnable task = new Task();
Thread thread = new Thread(task)
class Task implements Runnable { class Task extends Thread {
public void run() { 스레드 실행 코드 } OR @Override
} public void run() { 스레드 실행 코드}
OR }
Thread thread = new Thread(
new Runnable() { public void run () { 스레드 실행 코드 }
)
- Runnable 인터페이스를 구현한 객체를 매개변수로 넣어 호출하여 생성한다.
스레드 실행(대기) : thread.start();
스레드 실행 : thread.run()
Thread 구현 및 생성을 위한 Runnable , Callable 인터페이스
Runnable | Callable | |
return 타입 | X | 제네릭으로 받은 리턴 반환 |
예외처리 | X | Exception 처리 가능 |
구현 메소드 | run() | call() |
동시성과 병렬성
- 멀티 작업을 위하여 스레드는 여러개를 번갈아가면서 실행하는 동시성과 멀티코어에서 개별 스레드를 동시에 실행 시키는 병렬성을 충족 해야 한다, 이를 위해서는 스케쥴링이 필요한데 스레드의 우선 순위를 주어 동시성과 병렬성을 충족 시킬 수 있다.
thread.setPriority(Thread.MAX_PRIORITY) // 10
thread.setPriority(Thread.NORM_PRIORITY) // 5
thread.setPriority(Thread.MIN_PRIORITY) // 1
동기화
- 여러개의 스레드가 작업 중일 경우 하나의 스레드의 결과가 다른 스레드에 영향을 미칠수도 있으면 동기화 메소드를 이용하여 스레드를 관리 할 수 있다.
- synchronize가 붙은 메소드는 해당 작업이 다 끝날때 까지 다른 스레드를 실행 시키지 않고 해당 스레드 마무리 후 진행된다.
public stnchronized 리턴타입 메소드(){
스레드 실행 구문
}
쓰레드는 위에 적은것을 제외 하고도 많은 기능들이 있다. 스레드를 이용할 떄 다시 한번 정리하며 진행하면 좋을듯 하다