본문 바로가기
국비/JAVA

JAVA : Thread(쓰레드)

by suehyune12 2022. 8. 18.

프로그램

실행되지 않은 상태.

프로세스

실행된 프로그램

쓰레드

프로세스 처리 경로

 




- 단일 쓰레드

처리 경로를 한개만 가지고 있기 때문에 직렬적이다.
동시에 많은 양을 처리하기 힘들기 때문에 상대적으로 비효율적이다.
하지만 하나의 작업에 문제가 발생하더라도 다른 작업에는 영향을 끼치지 않는다.
따라서 안정성이 보장되고 설계 시 멀티 쓰레드에 비해 쉽다.


-멀티 쓰레드

하나의 프로세스를 동시에 처리하는 것처럼 보이지만 사실은 매우 짧은 단위로 분할해서 차례로 처리한다.
    여러 개의 처리 경로를 가질 수 있도록 하며, 동시 작업이 가능해진다.
    설계하기 굉장히 어려우며, 하나의 쓰레드 문제 발생 시 모든 쓰레드에 문제가 발생하게 된다.
    JAVA 웹 서버가 대표적인 멀티 쓰레드이다. 멀티 쓰레드로 설계했다면, 처리량 증가, 효율성 증가,
    처리비용 감소의 장점이 있기 때문에 단점을 감수하고 설계하는 편이다.


쓰레드 구현 방법


핵심 : run( )메소드 재정의



1. Thread 클래스 상속

Thread 클래스 상속

단일 쓰레드와 멀티 쓰레드 차이

 


2. Runnable 인터페이스 지정

unnable 인터페이스 지정
join( ) 사용

 


실습 1


동석이네 동물원에는 3마리의 동물이 있다.
각 동물은 울음 소리가 다르고 2마리의 동물은 동시에 운다.
 나머지 1마리 동물은 2마리 동물이 모두 울고 나서 마지막에 운다.
 package명은 threadTest1으로 만들고 클래스는 2개만 선언한다.
하나의 클래스에는 main 쓰레드가 있다.
Runnable 인터페이스로 멀티 쓰레드를 구현하고 반드시 join()을 사용한다.
※ 각 동물은 10번씩만 운다.

동물 울음소리 Runnable 인터페이스로 클래스 생성

 


 

실습 2

 3개의 쓰레드가 있다.
    Thread1, Thread2, Thread3
   사용자가 입력한 순서대로 각 알맞는 문자열이 출력된다.
   입력 예) 3 1 2
    출력 예) third first second
   단, Thread들은 항상 1, 2, 3 순서로 실행되어야 한다.
예) Thread1 : third
   Thread2 : first
   Thread3 : second
   출력 시 쓰레드의 번호도 출력할 경우 가산점으로 처리한다.

 

Runnable 인터페이스

 

 


동기화 (Synchronized)

하나의 쓰레드가 자원에 접근 중일때 다른 쓰레드가 동시에 같은 자원을 접근하지 못하게 막는 것
즉, 자원 공유 문제를 해결할 수 있다.


동기화 문법

- 블럭 : synchronized(mutex){...}

  동기화 블럭이라고 부르며, 일부 소스코드만 동기화를 걸어준다.


- 키워드 : synchronized

영역 전체에 동기화를 걸어주며, 메소드 리턴 타입 앞에 작성하면
해당 메소드 전체에 동기화가 걸린다.

'국비 > JAVA' 카테고리의 다른 글

JAVA : 파일 입출력  (0) 2022.08.22
JAVA : Map  (0) 2022.08.17
JAVA : Set extends Collection  (0) 2022.08.17
JAVA : Wrapper Class  (0) 2022.08.16
JAVA : List extends Collection  (0) 2022.08.16