2014년 8월 25일 월요일

Thread

[Process : 실행 중인 프로그램] <- [자원(Resource) : 메모리, 데이터 ] + [Thread]

장점 : 다중 작업이 가능.
단점 : Deadlock(교착상태)
         ※ deadlock : 상대의 자원을 사용하려고 서로 대기하는 상태(추후 설명)

  • 쓰레드의 구현과 실행

구현방법
1. Thread 클래스 상속
2. Runnable 인터페이스 구현 : 코드 재사용성(reusablility), 코드 일관성(consistency)유지

예제 : /JAVA_Standard/src/threadEx/ThreadEx.java

쓰레드가 실행되는 과정

1. Stack1[main()] : call stack
2. Stack1[main(), start()] : start method call run method and run method work
3. Stack1[main(), start()], Stack2[run()] : call new stack
4. Stack1[main()], Stack2[run()] : start method final, Stack1, Stack2 Thread work
5. 쓰레드가 종료되면 프로그램이 종료된다.

그렇다면 Thread 실행 순서는 어떻게 정해지는가?
: 스케줄러(Scheduler)가 결정.

  • 싱글 쓰레드와 멀티 쓰레드

: 책에 있는 내용으로 설명


  • 쓰레드의 우선순위
: 우선순위(priority) : MAX_PRIORITY = 10;, MIN_PRIORITY = 0; NORMAL_PRIORITY = 5;

  • 쓰레드 그룹 

: 기본적으로 자신을 생섷나 쓰레드와 같은 그룹에 생성
: 모든 쓰레드는 반드시 쓰레드 그룹에 포함되어야 한다.
: 책에 있는 내용으로 설명

  • 데몬 쓰레드(Daemon Thread)

: 가상 쓰레드로 일반 쓰레드의 작업을 보조하는 역할
: 책에 있는 내용으로 설명

  • 쓰레드의 실행제어
: p.646
: 책에 있는 내용으로 설명

  • 쓰레드의 동기화
1. 특정한 개체에 lock을 걸고자 할 때 :

Ex) synchronized (parameter) {
                                        //...
}

2. mothod에 lock을 걸고자 할 때 : 

Ex)public synchronized void MethodName(){
                                        //...
}
: 책에 있는 내용으로 설명

  • Semaphore : wait(), notify()
: wait()를 이용하여 명시적으로 lock을 걸어준다.
: 쓰레드의 접근이 끝나면 notify()를 사용하여 다음 쓰레드의 접근을 허용한다.
: 책에 있는 내용으로 설명

댓글 없음:

댓글 쓰기