2 minute read

13.1~13.2

1. 프로세서와 쓰레드

  • 프로세스
    • 실행중인 프로그램
    • 프로그램을 실행하면 OS로부터 실행에 필요한 자원을 할당받아 프로세스가 됨
    • 구성요소
      • 프로그램을 수행하는데 필요한 데이터
      • 메모리 등의 자원
      • 쓰레드
  • 쓰레드
    • 프로세스의 자원을 이용해서 실제로 작업을 수행
    • 모든 프로세스에 하나 이상 존재
    • 멀티쓰레드 프로세스
      • 둘 이상의 쓰레드를 가진 프로세스
    • 프로세스의 메모리 한계가 최대 쓰레드 개수 결정
  • 멀티태스킹
    • 복수의 프로세스를 동시에 실행
  • 멀티쓰레딩
    • 단수의 프로세스 내에서 복수의 프로세스를 실행
    • 장점
      • CPU 사용률 향상
      • 자원을 효율적으로 사용
      • 사용자에 대한 응답성 향상
      • 작업 분리로 코드 간결화
    • 쓰레드 교착 상태
      • 두 쓰레드가 자원을 점유한 상태에서 서로 상대편이 점유한 자원 사용을 위해 대기하면서 진행이 멈춘 상태

2. 쓰레드의 구현과 실행

  • Thread클래스 상속

      class MyThread extends Thread {
      	public void run() {/*작업 내용*/} // thread클래스의 run 오버라이딩
      }
        
      class Program {
      	public static void main(String args[]) {
      		ThreadEx t = new ThreadEx();
      		t.start();
      	}
      }
        
      class ThreadEx extends Thread {
      	public void run() {
      		for(int i = 0; i< 5; i++) {
      			System.out.println(getName()); //조상인 Thread의 getName() 호출
      		}
      	}
      }
    
  • Runnable인터페이스 구현(일반적)

      class MyThread implements Runnable {
      	public void run() {/*작업 내용*/} // Runnable인터페이스의 run()을 구현
      }
        
      class Program {
      	public static void main(String args[]) {
      		Runnable r = new ThreadEx();
      		Thread t = new Thread(r);
      		t.start();
      	}
      }
        
      class ThreadEx extends Thread {
      	public void run() {
      		for(int i = 0; i< 5; i++) {
      			// Thread.currentThread() - 현재 실행중인 Thread 반환
      			System.out.println(Thread.currentThread().getName()); //조상인 Thread의 getName() 호출
      		}
      	}
      }
    
  • Thread의 실행

    • Thread의 메서드 start()로 실행 대기
    • 실행 대기상태인 Theread는 OS의 스케쥴러에 의해서 실행

Leave a comment