면접준비(8)쓰레드

Tae hyun·2023년 4월 11일
0

면접준비

목록 보기
8/9

출처: 자바의 정석 3판 ch 13 쓰레드 p721~748
프로세스: 실행중인 프로그램, 자원과 쓰레드로 구성
쓰레드: 프로세스 내에서 실제 작업을 수행
모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다.

싱글 쓰레드프로세스
=자원+쓰레드

멀티 쓰레드 프로세스
=자원+쓰레드+쓰레드+...+쓰레드

멀티쓰레드의 장단점
장점
-시스템 자원을 보다 효율적으로 사용할 수 있다.
-사용자에 대한 응답성이 향상된다.
-작업이 분리되어 코드가 간결해 진다.

단점
-동기화에 주의해야 한다.
-교착상태가 발생하지 않도록 주의해야 한다.
-각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다.
"프로그래밍 할 때 고려해야 할 사항들이 많다."

쓰레드의 구현, 실행
구현
1)Thread클래스 상속
자바는 단일 상속이기 때문에 쓰레드를 상속받으면 다른 클래스를 상속받기 어렵다.

2)Runnable 인터페이스를 구현
인터페이스를 구현하면 다른 클래스도 상속 가능하기 때문에 thread클래스를 상속하는 것보다 유연하다.

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{  //Thread클래스를 상속해서 쓰레드를 구현
	public void run() {
    	for(int i=0;i<5;i++){
        	System.out.println(getName());//조상인 Thread의 getName()을 호출
        }
    }
}
class ThreadEx1_2 implements Runnable{  //Runnable인터페이스를 구현해서 쓰레드를 구현
  public void run(){
    for(int i=0;i<5;i++){
        //Thread.currnetread()-현재 실행중인 Thread를 반환함
      System.out.println(Thread.currentThread().getName());
    }
  }
}

실행-start()
-쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.
작업 실행 순서는 os스케줄러가 결정함

main쓰레드
-메인 메서드의 코드를 수행하는 쓰레드
-사용자 쓰레드, 데몬쓰레드 두종류가 있음
프로그램은 실행 중인 사용자 쓰레드가 하나도 없을 때 종료됨
ex. main 쓰레드가 있고 사용자 쓰레드 Thread1 Thread2가 있다면 main쓰레드가 종료되어도 사용자 쓰레드가 모두 종료되어야 프로그램이 종료된다.

멀티 쓰레드는 어떤 한 작업이 수행되는 동안 다른 외부적인 요인에 의해 멈춰있을 때도 다른 쓰레드가 작업을 수행할 수 있어서 작업을 효율적으로 빨리 끝낼 수 있다는 장점이 있다(I/O블락킹을 억제함).

쓰레드의 상태
1)New: 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태
2)Runnable: 실행 중 또는 실행 가능한 상태
3)Blocked: 동기화블럭에 의해서 일시정지된 상태
4)Waiting, Timed_Waiting: 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지상태. Timed_Waiting은 일시정지시간이 지정된 경우를 의미함
5)Terminated: 쓰레드의 작업이 종료된 상태

profile
안녕하세요 개발하는 알파카입니다. https://github.com/oh-taehyun

0개의 댓글