Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

명품 JAVA Programming 제 13 장 스레드와 멀티태스킹.
6장 java.applet.Applet의 네트워크 메쏘드들
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
10. 예외 처리.
11장 스레드.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
명품 JAVA Programming 제 13 장 스레드와 멀티태스킹.
명품 JAVA Essential.
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
제8장 쓰레드 프로그래밍.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
어서와 Java는 처음이지! 제16장 스레드.
Java 10장. 다중 스레드 public class SumTest {
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
[ 단원 08 ] 예외처리와 스레드.
Power Java 제16장 스레드(Thread).
19장 스윙과 이벤트 처리 Section 1 스윙 컴포넌트 Section 2 이미지 아이콘과 라벨
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
쓰레드 프로그래밍 Youngnam Kim.
최용술 장 Thread 최용술
명품 JAVA Essential.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
스레드란? 멀티 태스킹(muli-tasking)는 여러 개의 애플리케이션을 동시에 실행하여서 컴퓨터 시스템의 성능을 높이기 위한 기법 그림23-1. 병철 처리의 예.
12 ███████████ 12.
Chapter 06 프로세스와 예약작업 관리 Solaris 1. 프로세스 관리
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Lesson 7. 클래스와 메소드 - 1.
자바네트워크 제2주 실습 네트워크기초, 스레드.
자바 5.0 프로그래밍.
Subject : Thread Written by: 김형근,류명운.
예외 처리 및 스레드 클래스 활용 학습목표 오류 발생 시 무조건 정지하지 않고 경우에 따라서 예외 처리하여 정상 작동을 하는 경우의 Exception 클래스에 대해서 학습한다. 멀티미디어 파일에서 동시에 다운로드 받는 효과를 갖을 수 있는 스레드(Thread) 클래스에.
7장 인터페이스와 추상 클래스.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
JA A V W. 03.
자바응용.
Subject : Thread Written by: 김형근,류명운.
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
Chap10 다중 스레드 Section 1 : 스레드 개요 Section 2 : Thread 클래스와 스레드 생명주기
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
자바 5.0 프로그래밍.
System.Threading Process / Thread SD50 – C# & .NET Platform.
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
JA A V W. 06.
10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
( Windows Service Application Debugging )
Chapter 17. 스레드.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
MIDP 네트워크 프로그래밍 ps lab 김윤경.
발표자 : 이지연 Programming Systems Lab.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
제8장 쓰레드 프로그래밍.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
Power Java 제23장 스레드.
Presentation transcript:

Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용 8.4 스레드 우선 순위 8.5 동기화(Synchronization) 8.6 스레드 사이의 통신

8.1 스레드 개요 스레드 순차적으로 동작하는 문장들의 단일 집합 경량(lightweight) 프로세스 다중 스레드 하나의 프로세스(프로그램)에 하나 이상의 스레드를 생성하여 실행할 때 자바는 스레드를 지원하기 위해 java.lang.Thread 클래스 제공 다수개의 CPU를 가진 컴퓨터에서 다중 스레드의 실행 한 개의 CPU를 가진 컴퓨터에서 다중 스레드의 실행 스레드1 스레드2 스레드3 프로그램

8.2 Thread 클래스와 스레드의 생명주기 JDK는 스레드를 지원하는 java.lang.Thread 클래스 제공 스레드를 생성하기 위해 사용 4개의 생성자를 제공 Thread() Thread(String s) Thread(Runnable r) Thread(Runnable r, String s)

8.2 Thread 클래스와 스레드의 생명주기 Thread 클래스의 메소드 메소드 이름 설명 static void sleep(long msec) throws InterruptedException msec에 지정된 밀리초(milliseconds) 동안 대기 String getName() 스레드의 이름을 반환 void setName(String s) 스레드의 이름을 s로 설정 void start() 스레드를 시작시킨다. run() 메소드를 호출 int getPriority() 스레드의 우선 순위를 반환 void setPriority(int p) 스레드의 우선 순위를 p값으로 설정 boolean isAlive() 스레드가 시작되었고 아직 끝나지 않았으면 true를 그렇지 않으면 false를 반환 void join() throws InterruptedException 스레드가 끝날 때까지 대기 void run() 스레드가 실행할 부분을 기술하는 메소드 하위 클래스에서 오버라이딩 되어야 한다 void suspend() 스레드가 일시 정지된다. resume()에 의해 다시 시작될 수 있다 void resume() 일시 정지된 스레드를 다시 시작시킨다

8.2 Thread 클래스와 스레드의 생명주기 Thread의 생명주기 실행 종료 생성 대기상태 실행가능 상태 run() 종료 new 생성 start() yield() 또는 시간종료 interrupt() join() sleep() wait() 대기상태 대기 (join할 스레드가 종료되기를 기다림) 대기 (sleep time이 끝나기를 기다림) 대기 (notify 신호를 기다림) join 스레드 종료 sleep time 종료 notify() notyfyAll()

8.3 스레드의 생성과 사용 스레드를 생성하는 2가지 방법 Thread 클래스로부터 직접 상속받아 스레드를 생성 Runnable 인터페이스를 사용하는 방법(현재의 클래스가 이미 다른 클래스로부터 상속 받고 있는 경우)

8.3 스레드의 생성과 사용 8.3.1 Thread 클래스 이용 Thread 클래스로부터 직접 상속 받아 스레드를 생성 Thread 클래스에서 제공되는 run() 메소드를 오버라이딩하여 스레드의 동작을 기술 class ThreadA extends Thread { // Thread 클래스로부터 상속 ......... public void run() { .... // 상위 클래스인 Thread 클래스의 run() 메소드를 오버 .... //라이딩하여 스레드가 수행하여야 하는 문장들을 기술 } .... ThreadA ta = new ThreadA(); ta.start(); // 스레드 객체를 생성하여 스레드를 // 시작시킨다

8.3 스레드의 생성과 사용 8.3.2 Runnable 인터페이스 이용 Runnable 인터페이스는 JDK에 의해 제공되는 라이브러리 인터페이스이다 Runnable 인터페이스에는 run() 메소드만 정의되어 있다 public interface Runnable { public void run(); }

8.3 스레드의 생성과 사용 이미 Applet 클래스로부터 상속을 받고 있으므로 인터페이스 이용 class RunnableB extends Applet implements Runnable { ......… public void run() { ........ // Runnable 인터페이스에 정의된 run() 메소드를 ........ // 오버라이딩하여 스레드가 수행할 문장들을 기술한다 } .....

8.3 스레드의 생성과 사용 Runnable 인터페이스를 이용하여 스레드를 생성하는 방법 RunnableB rb = new RunnableB(); // 객체 rb 생성 Thread tb = new Thread(rb); // rb를 매개변수로 하여 스레드 객체 tb를 생성 tb.start(); // 스레드 시작 또는 RunnableB rb = new RunnableB(); new Thread(rb).start(); // 스레드 객체를 생성하여 바로 시작

8.3 스레드의 생성과 사용 예제 : ThreadfromThread.java 예제 : ThreadfromRunnable.java 예제 : ThreadDouble.java

8.4 스레드 우선 순위 스레드에 우선 순위를 부여하여 우선 순위가 높은 스레드에게 실행의 우선권을 부여할 수 있다 setPriority() 메소드를 이용하여 우선 순위 부여 우선 순위를 지정하기 위한 상수 제공 static final int MAX_PRIORITY 우선순위 10 static final int MIN_PRIORITY 우선순위 1 static final int NORM_PRIORITY 우선순위 5 예제 : ThreadPriority.java

8.5 동기화(Synchronization) 대부분의 응용 프로그램에서 다수개의 스레드가 공유할 수 있는 부분이 요구된다 공유부분은 상호 배타적으로 사용되어야 한다 임계영역(critical section) 상호배타적으로 사용되는 공유부분 자바는 한 순간에 하나의 스레드만 실행할 수 있는 synchronized method 제공 한 스레드가 synchronized method를 수행 중이면 다른 스레드는 대기한다

8.5 동기화(Synchronization) 동기화(Synchronization) - synchronized method 수행 시간 t0 lock을 얻는다 t1 lock을 요청하지만 이미 t2 사용중이므로 기다린다 t3 t4 t5 t6 lock을 양보한다 t7 lock을 얻는다 t8 t9 synchronized method 스레드A 스레드B ……… ……………….. 임계영역 문장들

8.5 동기화(Synchronization) 예제 : TVContribution.java

8.6 스레드 사이의 통신 java.lang.Object 클래스에서는 스레드 사이의 통신을 위해 3개의 메소드를 제공 wait() 메소드 : 스레드 수행중 이 메소드를 만나면 가지고 있는 lock을 양보하고 대기상태로 들어간다 void wait() throws InterruptedException void wait(long msec) throws InterruptedException void wait(long msec, int nsec) throws InterruptedException msec와 nsec는 대기 시간을 의미 notify() : 대기 상태의 스레드중에서 하나의 스레드를 깨운다 notifyAll() : 대기 상태의 모든 스레드를 깨운다 void notify() void notifyAll()

8.6 스레드 사이의 통신 wait() 메소드와 notify(), notifyAll() 메소드의 동작 예제 1 : ProducerConsumer.java 스레드 t1 스레드 t2 대기상태를 깨운다 wait() notify() notifyAll()