Day 60

ChangWoo·2023년 6월 4일
0

자바의 정석

목록 보기
57/71
post-thumbnail

ch 13-1~2 프로세스와 쓰레드, 멀티쓰레드의 장단점

프로세스와 쓰레드(process & thread) (1/3)

  • 프로세스 : 실행중인 프로그램, 자원(resource)과 쓰레드로 구성
  • 쓰레드 : 프로세스 내에서 실제 작업을 수행.
    모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다.

프로세스와 쓰레드(process & thread) (2/3)

  • 프로세스 : 쓰레드 = 공장 : 일꾼
  • 싱글 쓰레드 프로세스 = 자원 + 쓰레드
  • 멀티 쓰레드 프로세스 = 자원 + 쓰레드 + 쓰레드 + 쓰레드 + .... + 쓰레드

프로세스와 쓰레드(process & thread) (3/3)

  • 하나의 새로운 프로세스를 생성하는 것보다 하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다.
  • 2 프로세스 1 쓰레드 vs 1프로세스 2 쓰레드
  • 왼쪽은 싱글쓰레드 프르세스가 2개
  • 멀티쓰레드 프로세스가 1개

멀티 쓰레드의 장단점

  • 대부분의 프로그램이 멀티쓰레드로 작성되어 있다. 그러나, 멀티 쓰레드 프로그래밍이 장점만 있는 것은 아니다.
  • 기아(굶어죽는)문제 : 특정 쓰레드는 실행할 기회를 얻지 못한다.

ch 13-3~6 쓰레드의 구현과 실행

쓰레드의 구현과 실행

  • 1.Thread 클래스를 상속
class MyThread extends Thread {
	public void run() { // Thread클래스의 run()을 오버라이딩
    	/* 작업 내용 */
    }
}
MyThread t1 = new MyThread(); // 쓰레드의 생성
t1.start(); // 쓰레드의 실행
  • 2.Runnable인터페이스를 구현
public interface Runnable {
	public abstract void run ();
}
class MyThread2 extends Runnable {
	public void run() { // Runnable인터페이스의 추상메서드 run()을 구현
    	/* 작업 내용 */
    }
}
Runnable r = new MyTrhead2();
Thread t2 = new Thread(r); // Thread(Runnable r)
// Thread t2 = new Trhead(new MyThread2());
t2.start();

쓰레드의 실행 - start()

  • 쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.
ThreaeEx1_1 t1 = nw TrheadEx1_1(); // 쓰레드 t1을 생성한다.
ThreaeEx1_1 t2 = nw TrheadEx1_1(); // 쓰레드 t2를 생성한다.
t1.start(); // 쓰레드 t1을 실행시킨다.
t2.start(); // 쓰레드 t2를 실행시킨다.
  • start()를 했더라도 시작되지 않을 수 있다.
  • 먼저 start() 했더라도 먼저 시작되지 않을 수 있다.

start()와 run()

  • 1.쓰레드 생성 -> 2.쓰레드 실행
    1. main메서드에서 쓰레드 호출
    1. 쓰레드 메서드가 새로운 호출스택을 생성
    1. 새로운 호출스택에 run을 올린 뒤 strat메서드가 종료된다.
    1. 각각의 쓰레드가 자기만의 호출스택을 가지고 실행을 한다. (서로 독립적인 작업을 수행)
  • 반드시 strat()로 호출해야 새로운 스택이 생기고 run이 올라갈 수 있다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글