본문으로 바로가기

스레드 (Thread)

category Java/java 2020. 8. 13. 17:36

멀티 태스킹
 : 프로세스란 운영체제에서 실행중인 하나의 프로그램을 말한다
 : 멀티 프로세스란 두 개 이상의 프로세스가 실행되는 것을 말한다
 : 멀티 태스킹이랑 두 개 이상의 프로세스를 실행하여 일을 처리하는 것을 말한다

멀티 스레드
 : 스레드란 프로세스 내에서 실행되는 세부 작업 단위이다
 : 멀티스레드란 하나의 프로세스에서 여러 개의 스레드가 병행적으로 처리되는 것을 말한다.

 

스레드의 생명주기

 : 스레드는 Thread 객체가 생성되면 생명주기를 갖게 되는데 크게 5가지로 나누게 된다.

     New - 스레드가 만들어진 상태

     Runnable - 스레드 객체가 생성된 후에 start() 메서드를 호출하면 Runnable 상태로 이동하게 된다. (대기상태)

     Running- Runnable 상태에서 스레드 스케줄러에 의해 Running 상태로 이동하게 된다.

     Blocked - 스레드가 다른 특정한 이유로 Running 상태에서 Blocked 상태로 이동하게 된다

     Dead - 스레드가 종료되면 그 스레드는 다시 시작할 수 없게 된다.

 

스레드의 생성 방법

Thread 클래스를 상속받는 방법

Runnable 인터페이스를 구현하는 방법

 

Thread 클래스를 이용한 스레드 생성 방법

public class CreateThread extends Thread{
	public void run(){
    }
    public static void main(String[] args){
    	CreateThread ct = new CreateThread();
        ct.start();
    }
}

 

Runnable 인터페이스를 이용한 스레드 생성 방법

public class CreateRunnable implements Runnable{
	public void run(){
    }
    public static void main(String[] args){
    	CreateRunnable ct = new CreateRunnable();
        Thread t = new Thread(ct);
        t.start();
    }
}

 

join() 메서드 사용법

 : join() 메서드는 join() 메서드를 호출한 스레드가 종료할 때까지 현재의 스레드를 기다리게 된다.

 

스레드 스케줄링 방식

 : 선점형 스레드 스케줄링 방식은 스레드의 우선권을 가지고 우선순위가  높은 스레드를 먼저 수행시키는 방식이다

 : 협력형 스레드 스케줄러는 실행중인 스레드가 CPU 사용권을 다른 스레드에게 넘길 때까지 기다리는 방식이다.

 : JVM은 우선순위에 따른 선점형 스레드 스케줄링 방식을 사용하고 있다

 

스레드 우선순위

 : Thread 클래스에서는 스레드의 우선순위를 부여하는 setPriority(int newPriority) 메서드를 제공한다

 

동기화

 : 임계영역이란 멀티 스레드에 의해 공유자원이 참조될 수 있는 코드의 범위를 말한다

 : 멀티 스레드 프로그램에서 임계영역을 처리하는 경우 심각한 문제가 발생할 수 있다. 이러한 상황을 해결할 수 있는       방법이 동기화를 하는 것이다.

 : 동기화를 처리하기 위해 모든 객체에 락(lock)을 포함 시켰다.

 : 락이란 공유 객체에 여러 스레드가 동시에 접근하지 못하도록 하기 위한 것으로 모든 객체가 힙 영역에 생성될 때

   자동으로 만들어진다.

 

동기화 방법

 : 메서드의 동기화 방법

public synchronized void synchronizedMethod(){
	// 임계영역 코딩
}

 : 특정 블록의 동기화 방법

public void nomalMethod(){
	synchronized(동기화할 객체 또는 클래스명){
    	//임계영역 코딩
    }
}

 

공정(fairness)

여러 개의 스레드가 하나의 컴퓨팅 자원을 사용하기 위해 동시에 접근하는 프로그램을 작성할ㅇ 경우 모든 스레드는 공정하게 그 자원을 사용할 수 있도록 해주어야 한다.

 

기아(starvation)

하나 또는 그 이상의 스레드가 자원을 얻기 위해 Blocked 상태에 있고, 그 자원을 얻을 수 없게되면 다른 작업을 못하는 상태를 말한다.

 

교착상태(deadlock)

운영체제 혹은 소프트웨어의 잘못된 자원 관리로 인하여 둘 이상의 프로그램이 함께 멈추어 버리는 현상을 말한다.

 

Object 클래스의 wait(), notify(), notifyAll()

 : 동기화된 스레드는 동기화 블록에서 다른 스레드에게 제어권을 넘기지 못한다

 : 이와 같이 동기화된 블록에서 스레드 간의 통신하기위해서는 wait(), notify(), notifyAll() 메서드를 사용한다

 : 이 메서드를 사용할 때 주의할 점은 synchronized블록에서만 의미가 있다

반응형

'Java > java' 카테고리의 다른 글

자바스크립트 (JavaScript)  (0) 2020.08.20
네트워크  (0) 2020.08.14
GUI 프로그래밍  (0) 2020.08.13
예외처리 (Exception)  (0) 2020.08.12
제네릭 (Generics)  (0) 2020.08.11