Java의 정석 제 12 장 쓰레드(thread) Java 정석 2009. 7. 31 남궁성 강의 Chapter 12. 쓰레드(thread) http://www.javachobo.com Java의 정석 제 12 장 쓰레드(thread) 2009. 7. 31 남궁성 강의 castello@naver.com
1.1 프로세스와 쓰레드(process & thread) (1) Java 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.1 프로세스와 쓰레드(process & thread) (1) ▶ 프로그램 : 실행 가능한 파일(HDD) ▶ 프로세스 : 실행 중인 프로그램(메모리) 2 2
1.1 프로세스와 쓰레드(process & thread) (2) Java 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.1 프로세스와 쓰레드(process & thread) (2) ▶ 프로세스 : 실행 중인 프로그램, 자원(resources)과 쓰레드로 구성 ▶ 쓰레드 : 프로세스 내에서 실제 작업을 수행. 모든 프로세스는 하나 이상의 쓰레드를 가지고 있다. 프로세스 : 쓰레드 = 공장 : 일꾼 ▶ 싱글 쓰레드 프로세스 = 자원+쓰레드 쓰레드(일꾼) 프로세스(공장) ▶ 멀티 쓰레드 프로세스 = 자원+쓰레드+쓰레드+…+쓰레드 … 3 3
vs. Java 1.2 멀티프로세스 vs. 멀티쓰레드 정석 “하나의 새로운 프로세스를 생성하는 것보다 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.2 멀티프로세스 vs. 멀티쓰레드 “하나의 새로운 프로세스를 생성하는 것보다 하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다.” - 2 프로세스 1 쓰레드 vs. 1 프로세스 2 쓰레드 vs. 4 4
“프로그래밍할 때 고려해야 할 사항들이 많다.” Java 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.3 멀티쓰레드의 장단점 “많은 프로그램들이 멀티쓰레드로 작성되어 있다. 그러나, 멀티쓰레드 프로그래밍이 장점만 있는 것은 아니다.” 장점 - 자원을 보다 효율적으로 사용할 수 있다. 사용자에 대한 응답성(responseness)이 향상된다. 작업이 분리되어 코드가 간결해 진다. “여러 모로 좋다.” 단점 동기화(synchronization)에 주의해야 한다. 교착상태(dead-lock)가 발생하지 않도록 주의해야 한다. 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다. “프로그래밍할 때 고려해야 할 사항들이 많다.” 5 5
Java 1.4 쓰레드의 구현과 실행 정석 의 Chapter 12. 쓰레드(thread) 6 6 http://www.javachobo.com 1.4 쓰레드의 구현과 실행 6 6
Java 1.5 start() & run() 정석 의 Chapter 12. 쓰레드(thread) 7 7 http://www.javachobo.com 1.5 start() & run() 7 7
Java 1.6 싱글쓰레드 vs. 멀티쓰레드(1) 정석 ▶ 싱글쓰레드 ▶ 멀티쓰레드 의 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.6 싱글쓰레드 vs. 멀티쓰레드(1) ▶ 싱글쓰레드 ▶ 멀티쓰레드 A B t(시간) t(시간) B A A B t(시간) 8 8
Java 1.6 싱글쓰레드 vs. 멀티쓰레드(2) 정석 ▶ 싱글쓰레드 ▶ 멀티쓰레드 의 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.6 싱글쓰레드 vs. 멀티쓰레드(2) A B t(시간) ▶ 싱글쓰레드 사용자 입력을 기다리는 구간 t(시간) A B ▶ 멀티쓰레드 9 9
1.7 쓰레드의 우선순위(priority of thread) Java 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.7 쓰레드의 우선순위(priority of thread) “작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖도록 할 수 있다. ” t(시간) B A ▶ 우선순위가 같은 경우 ▶ A의 우선순위가 높은 경우 t(시간) A B 10 10
Java 1.8 쓰레드 그룹(ThreadGroup) 정석 - 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.8 쓰레드 그룹(ThreadGroup) - 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것 - 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다. - 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 ‘main쓰레드 그룹’에 속한다. - 자신을 생성한 쓰레드(조상 쓰레드)의 그룹과 우선순위를 상속받는다. 11 11
Java 1.9 데몬 쓰레드(daemon thread) 정석 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.9 데몬 쓰레드(daemon thread) - 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할을 수행. - 일반 쓰레드가 모두 종료되면 자동적으로 종료된다. - 가비지 컬렉터, 자동저장, 화면자동갱신 등에 사용된다. - 무한루프와 조건문을 이용해서 실행 후 대기하다가 특정조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다. * setDaemon(boolean on)은 반드시 start()를 호출하기 전에 실행되어야 한다. 그렇지 않으면 IllegalThreadStateException이 발생한다. 12 12
Java 1.10 쓰레드의 실행제어 정석 의 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.10 쓰레드의 실행제어 * resume(), stop(), suspend()는 쓰레드를 교착상태로 만들기 쉽기 때문에 deprecated되었다. 13 13
1.11 쓰레드의 상태(state of thread) Java 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.11 쓰레드의 상태(state of thread) 14 14
Java 1.12 쓰레드의 실행제어 – Example1 정석 의 Chapter 12. 쓰레드(thread) 15 15 http://www.javachobo.com 1.12 쓰레드의 실행제어 – Example1 15 15
Java 1.12 쓰레드의 실행제어 – Example2 정석 의 Chapter 12. 쓰레드(thread) 16 16 http://www.javachobo.com 1.12 쓰레드의 실행제어 – Example2 16 16
1.13 쓰레드의 동기화 - synchronized Java 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.13 쓰레드의 동기화 - synchronized - 한 번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 락(lock)을 걸어서 데이터의 일관성을 유지하는 것. 17 17
Java 1.13 쓰레드의 동기화 - Example 정석 의 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.13 쓰레드의 동기화 - Example ▶Synchronized없을 때 ▶Synchronized있을 때 18 18
1.14 쓰레드의 동기화 – wait(), notify(), notifyAll() Java 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.14 쓰레드의 동기화 – wait(), notify(), notifyAll() - 동기화의 효율을 높이기 위해 wait(), notify()를 사용. - Object클래스에 정의되어 있으며, 동기화 블록 내에서만 사용할 수 있다. ▶wait() – 객체의 lock을 풀고 해당 객체의 쓰레드를 waiting pool에 넣는다. ▶notify() – waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다. ▶notifyAll() – waiting pool에서 대기중인 모든 쓰레드를 깨운다. 19 19
Java 1.14 쓰레드의 동기화 – Example2 정석 의 Chapter 12. 쓰레드(thread) 20 20 http://www.javachobo.com 1.14 쓰레드의 동기화 – Example2 20 20
1.14 쓰레드의 동기화 – Example2-1 improved Java 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 1.14 쓰레드의 동기화 – Example2-1 improved 21 21
감사합니다. http://www.javachobo.com Java 정석 의 정석 Chapter 12. 쓰레드(thread) http://www.javachobo.com 감사합니다. 더 많은 동영상강좌를 아래의 사이트에서 구하실 수 있습니다. http://www.javachobo.com 이 동영상강좌는 비상업적 용도일 경우에 한해서 저자의 허가없이 배포하실 수 있습니다. 그러나 일부 무단전제 및 변경은 금지합니다. 관련문의 : 남궁성 castello@naver.com