[Java] Thread

● Thread

(1) Process and Program

Process - 실행중인 프로그램

 cpu가 사용할수있도록 보조기억장치에서 주기억장치로 프로그램을 이동할때 사용 

Program - 실행중이 아닌 프로그램


Multi Process - 시분할 작업, 여러 프로그램을 실행하는 것

Multi Processor


스케줄링 해주는 것이 OS


Thread : 하나의 프로세스 안에서 실행되는 작업 단위


(2) Multi Thread


(3) 자바에서 지원하는 스레드 기법

1) Thread클래스 상속

2) Runnable인터페이스 상속 (대안)


(4) 모든 자바클래스는 반드시 하나의 스레드를 가지고 있다.

: main() -> 메인 스레드

: run() -> 자식 스레드가 해야할 일을 적어주는 곳


(5) Thread의 Lifecycle

Start -> Run -> 종료 ( 종료의 두가지 방법 : 자연스러운 종료, 강제종료)


Suspend() -> Thread가 강제로 잠시 일을 쉬게 해주는 것  

  하지만 권장하지 않는 방법

resume() -> Suspend()로 쉬고 있는 Thread를 깨우는 것

Sleep() -> 가장 많이 쓰는 방법은  시간이 지나면 Start로 가서 처음부터 다시 실행된다.

block() -> 일시적인 차단 방법, 하드웨어적 처리 방법

yield() -> 현재 실행하고 있는 Thread를 쉬게 하는 메소드

wait() -> 현재 실행하고 있는 Thread를 강제로 쉬게 하는 메소드, 동기화일때 사용가능 

notify() -> Wait()로 쉬고 있는 Thread를 쉬게 하는 메소드





(6) synchronized

1) 메소드 앞에 사용

2) synchronized(공유객체){

코드 ...

}


동기화는 한번에 하나씩 처리하는것인데 동시에 처리하려고 했기 때문에 동기화가 깨진다.

동기화의 효율을 높이기 위해 사용하는 대표적인 알고리즘

- 뮤텍스(Mutex)와 세마포어(Semaphore)



(7) 강제종료 3가지

1) Stop()    //가장 쓰면 안되는 방법중 하나

2) interrupt()

3) 직접처리


8) 종료 시점

1) isAlive() -> Thread에게 살아있냐고 물어보는 메소드, 종료하는 것은 코드를 직접 만들어줘야한다.

2) Join() -> Join()은 모든걸 처리해주는 메소드 훨씬 편해서 주로 사용된다.




'BACKEND > Java' 카테고리의 다른 글

[Java] IO 예제  (0) 2017.11.02
[Java] Thread 예제  (0) 2017.11.02
[Java] IO  (0) 2017.10.30
[Java] Exception  (0) 2017.10.30
[Java] 연습코딩-2  (0) 2017.10.27

댓글

Designed by JB FACTORY