프로세스 : 실행중인 프로그램                                     --> 멀티태스킹 : 다중 프로세스 실행

쓰레드 : 프로세스 내에서 실제로 작업을 수행하는 곳        --> 멀티쓰레딩 : 한 프로세스 내에서 다중 쓰레드 실행

 

● 쓰레드 구현 

 - 쓰레드를 통해 작업하고자 하는 내용을 run()에 구현하는 것. 

 1. Thread 클래스를 상속 : 이방법을 쓰면 자바의 단일상속에 의해 다른 클래스를 상속받을수 없음.

 2. Runnable 인터페이스 구현 : 쓰레드간의 데이터를 공유해야 할 때 인터페이스로 구현해서 연결시킴

 

● Runnable 인터페이스

 - 추상메서드 run()만 정의되어있음

 

● start()

 - 쓰레드를 실행시킬 때 사용하는 인스턴스 메서드(Thread 클래스에 구현되어 있음)

 - 하나에 쓰레드에 대해 한번만 호출 가능(다시 호출하기 위해서는 new 연산자로 다시 만들어 줘야함)

 - 새로운 쓰레드를 호출스택에 생성한 다음 run()을 호출

 - 실행 대기 상태로 전환시키며 실행 중인 쓰레드가 없으면 바로 실행시킴

 

● run()

 - 쓰레드를 실행시키는 것이 아닌 run()에 구현된 메서드를 호출하는 것.

 - 쓰레드를 실행시키는 start()에 의해 호출당함.

 

● Thread.currentThread()

 - 현재 쓰레드 표기                             ex) Thread[name, priority, group]

 

● 데몬 쓰레드 : 일반 쓰레드를 돕기위한 보조역할 쓰레드

 - setDaemon(true)로 설정함. 이 메서드는 꼭 start() 호출 전에 실행 되어야함.

 - 보조적인 역할만 하기 때문에 일반 쓰레드가 종료되면 자동으로 종료됨.

 

스케줄링(실행제어)

 생성 --①-->실행대기<----②---->실행 --⑤-->소멸

                     └<-④-일시정지<- ┘

 

 ① - start() : 실행대기 or 바로 실행 

 ② - yield() : 다시 실행대기상태가 되고 다음 쓰레드가 실행됨

 ③ - suspend(), sleep(), wait(), join(), I/O block : 일시정지 상태로 전환 ex) 사용자의 입력을 기다림.

 ④ - resume(), notify(), interrupt(), timeout : 일시정지에서 벗어나 다시 실행대기로 전환

 ⑤ - stop() : 쓰레드 소멸

 

● 동기화(Synchronization)

 - 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 함.

 - lock을 갖은 하나의 쓰레드만 임계 영역 내의 코드 수행

 - synchronized로 임계 영역 설정.

 1. 동기화 메서드 : 메서드 선언부에 synchronized 설정

synchronized void withdraw() {
	if (money <= 0) {
	    return;
	}
	money -= 10000;
	System.out.println(Thread.currentThread().getName() + "출금. 잔액 : " + money);

}

 2. 동기화 블록 : synchronized 블록 지정

public void withdraw() {
   synchronized(this) {
	 if (money <= 0) {
	     return;
	 }
	 money -= 10000;
	 System.out.println(Thread.currentThread().getName() + "출금. 잔액 : " + money);
}

 

- wait() : 사용 중인 lock을 강제로 반납시킴.

- notify() : 중단 됐던 쓰레드가 lock을 다시 얻어 실행됨(재진입)

 

 

 

'Langauge > JAVA' 카테고리의 다른 글

어노테이션(Annotation)  (0) 2020.06.01
열거형(Enum)  (0) 2020.06.01
지네릭(Generics)  (0) 2020.05.31
예외처리(try-catch-finally)  (0) 2020.05.22
내부 클래스  (0) 2020.05.21

+ Recent posts