멀티 스레드

최지혜·2022년 10월 9일
0

java

목록 보기
7/33

프로세스

  • 실행 중인 하나의 애플리케이션
  • 운영체제로부터 실행에 필요한 메모리를 할당받아 코드를 실행

스레드: 코드 실행 흐름

멀티스레드

  • 하나의 프로세스가 두 가지 이상의 작업을 처리할 수 있음.
  • 하나의 프로세스 내부에 생성되기 때문에, 하나의 스레드가 예외 발생 시 프로세스 자체가 종료될 수 있음 -> 다른 스레드에 영향 -> 예외 처리 필수!

<-> 멀티프로세스: 운영체제에서 할당받은 자신의 메모리 있어 서로 독립적. 오류 발생해도 다른 프로세스에 영향 미치지 않음.

- 멀티 스레드 사용의 예시

  1. 대용량의 데이터 처리 시간을 줄이기 위해 데이터를 분할해서 병렬로 처리
  2. UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용하기도
  3. 다수 클라이언트 요청을 처리하는 서버를 개발할 때
  • 몇 개의 작업을 병렬로 실행할지 결정하고, 각 작업별로 스레드를 생성!
    메인스레드(ex. 프로그램 시작)
    작업스레드(ex. 1: 네트워킹, 2: 드로잉 등) 생성과 실행
  • 자바에서는 작업 스레드도 객체임! -> 클래스가 필요함.

    방법: 1. java.lang.Thread 클래스를 직접 객체화해서 생성
    2.Thread 클래스를 상속해서 하위 클래스를 만들어 생성함.

Thread 클래스로부터 직접 생성

Runnable(작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체, 인터페이스 타입)을
매개값으로 갖는 생성자를 호출해야 함.

Thread thread = new Thread(Runnable target);

runnalbe 구현 클래스 작성

class Task implements Runnable {
	public void run() {
    	스레드가 실행할 코드;
    }
}

Runnable은 작업 내용을 가지고 있는 객체이지 실제 스레드는 아닙니다.
Runnable 구현 객체를 생성한 후, 이것을 매개값으로 해서 Thread 생성자를 호출해야 작업 스레드가 생성

Runnable task = new Task();

Thread thread = new Thread(task);

코드를 좀 더 절약하기 위해 Thread 생성자를 호출할 때
Runnable 익명 객체를 매개값으로 사용할 수 있음. 이 방법이 더 많이 사용됨.

Thread thread = new Thread(new Runnable() {
	public void run() {
    	스레드가 실행할 코드;
    }
});

작업 스레드는 생성 즉시 실행되는 것이 아니라, start)메소드를 호출해야만 실행됨.

thread.start()

start()메소드가 호출되면, 작업 스레드는 매개값으로 받은 Runnable의 run()메소드를 실행하면서 자신의 작업을 처리함.

profile
매일 성장하는 개발자

0개의 댓글