본문 바로가기

Java

쓰레드

프로세스와 쓰레드(Process & Thread)

- 프로세스 : 실행 중인 프로그램, 자원(Resource)과 쓰레드로 구성 ( 자원 : CPU, MEMORY)

- 쓰레드 : 프로세스 내에서 실제 작업을 수행 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있음

- 멀티 태스킹(멀티 프로세싱) : 동시에 여러 프로세스를 실행시키는 것

- 멀티 쓰레딩 : 하나의 프로세스 내에 동시에 여러 쓰레드를 실행시키는 것

-> 프로세스를 실행하는 것보다 쓰레드를 생성하는 비용이 적음

-> 같은 프로세스 내의 쓰레드들은 서로 자원을 공유

 

멀티쓰레드의 장단점

- 대부분의 프로그램이 멀티쓰레드로 작성되어 있음

 

장점 

- 시스템 자원을 보다 효율적으로 사용할 수 있다.

- 사용자에 대한 응답성이 향상된다.

- 작업이 분리되어 코드가 간결해 진다.

 

단점

- 동기화에 주의해야 한다.

- 교착상태가 발생하지 않도록 주의해야 한다.

- 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다.

 

쓰레드의 구현과 실행

1. Thread 클래스를 상속

class ExThread_1 extends Thread {
	public void run() {
    	/* 생략 */
    }
}

2. Runnable 인터페이스를 구현

class ExThread_2 implements Runnable {
	public void run() {
    	/* 생략 */
    }
}

* 2번의 방법이 다중 상속등으로 인해 유연하다.

ExThread_1 t1 = new ExThread_1(); // 쓰레드 생성
t1.start(); // 쓰레드 실행

Thread t2 = new Thread(new ExThread_2()); // 쓰레드 생성
t2.start; // 쓰레드 실행

* run이 아닌 start를 호출하여 새로운 stack을 생성한 뒤 새로운 stack에 run이 올라간다.

 

쓰레드의 우선순위(priority of thread)

- 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있음

void setPriority(int newPriority); // 쓰레드의 우선순위를 지정한 값으로 변경
int getPriority(); // 쓰레드의 우선순위를 반환

 

쓰레드의 상태(state of thread)

쓰레드의 실행제어

- 쓰레드의 실행을 제어할 수 있는 메서드가 제공됨

* sleep은 예외처리가 필요하며 특정 쓰레드를 지정할 수 없다.

* suspend(), resume(), stop()은 deprecated이다.

 

쓰레드의 동기화(synchronized)

- 한 번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 락을 걸어서 데이터의 일관성을 유지하는 것

'Java' 카테고리의 다른 글

불편해서 직접만든 CapsLock 표시  (1) 2023.12.23
Java기초 예외처리  (0) 2022.12.04
제네릭스  (0) 2022.11.25