스레드란? 멀티 태스킹(muli-tasking)는 여러 개의 애플리케이션을 동시에 실행하여서 컴퓨터 시스템의 성능을 높이기 위한 기법 그림23-1. 병철 처리의 예.

Slides:



Advertisements
Similar presentations
컴퓨터와 인터넷.
Advertisements

목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
CHAP 22. 블루투스.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Power Java 제3장 이클립스 사용하기.
Power Java 제3장 이클립스 사용하기.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
최윤정 Java 프로그래밍 클래스 상속 최윤정
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
어서와 Java는 처음이지! 제16장 스레드.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Java 10장. 다중 스레드 public class SumTest {
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
NCS 학사운영 시스템 Guide.
Linux서버를 이용한 채팅프로그램 지도 교수님 : 이형원 교수님 이 름 : 이 은 영 학 번 :
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Error Detection and Correction
자바 5.0 프로그래밍.
Power Java 제14장 배치 관리자.
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
자바네트워크 제2주 실습 네트워크기초, 스레드.
6강. Servlet 본격적으로 살펴보기-II
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
10장. 예외처리.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
CHAP 12. 리소스와 보안.
Method & library.
JA A V W. 03.
어서와 C언어는 처음이지 제14장.
자바응용.
인터넷응용프로그래밍 JavaScript(Intro).
7가지 방법 PowerPoint에서 공동 작업하는 다른 사용자와 함께 편집 작업 중인 사용자 보기
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Adobe 제품 다운로드 및 설치 방법 안내 Adobe Creative Cloud Adobe License 권한을 받으신 분
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
Power Java 제11장 상속.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
CHAP 21. 전화, SMS, 주소록.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
Chapter 17. 스레드.
DK-128 직렬통신 실습 아이티즌 기술연구소
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
3. 모듈 (5장. 모듈).
발표자 : 이지연 Programming Systems Lab.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
워드프로세서 스프레드시트 문서 관리 인터넷 활용
Power Java 제14장 배치 관리자.
 6장. SQL 쿼리.
Power Java 제23장 스레드.
7 생성자 함수.
6 객체.
Presentation transcript:

스레드란? 멀티 태스킹(muli-tasking)는 여러 개의 애플리케이션을 동시에 실행하여서 컴퓨터 시스템의 성능을 높이기 위한 기법 그림23-1. 병철 처리의 예

스레드란? 다중 스레딩(multi-threading)은 하나의 프로그램이 동시에 여러 가지 작업을 할 수 있도록 하는 것 그림23-2. 다중 스레드의 개념

프로세스와 스레드 프로세스(process): 자신만의 데이터를 가진다. 스레드(thread): 동일한 데이터를 공유한다. 그림23-3. 스레드는 하나의 프로세스 안에 존재한다.

스레드를 사용하는 이유 웹 브라우저에서 웹 페이지를 보면서 동시에 파일을 다운로드할 수 있도록 한다. 워드 프로세서에서 문서를 편집하면서 동시에 인쇄한다. 게임 프로그램에서는 응답성을 높이기 위하여 많은 스레드를 사용한다. GUI에서는 마우스와 키보드 입력을 다른 스레드를 생성하여 처리한다.

중간 점검 문제

스레드 생성과 실행 스레드는 Thread 클래스가 담당한다. 스레드의 작업은 Thread 클래스의 run() 메소드 안에 기술한다.

스레드 생성과 실행 Thread 클래스를 상속하는 방법 Thread 클래스를 상속받은 후에 run() 메소드를 재정의한다. 스레드 생성 방법 Runnable 인터페이스를 구현하는 방법 run() 메소드를 가지고 있는 클래스를 작성하고 ,이 클래스의 객체를 Thread 클래스의 생성자를 호출할 때 전달한다.

Thread 클래스를 상속하기 Thread를 상속받아서 클래스를 작성한다. run() 메소드를 재정의한다. start()를 호출하여서 스레드를 시작한다. 일수를 알고 싶은 달을 입력하시오:6 월의 날수는 30

Thread 클래스를 상속하기 일수를 알고 싶은 달을 입력하시오:6 월의 날수는 30

Runnable 인터페이스를 구현하는 방법 Thread 객체를 생성하고 이때 MyRunnable 객체를 인수로 전달한다. start()를 호출하여서 스레드를 시작한다.

Runnable 인터페이스를 구현하는 방법

예제 A10 B10 A9 B9 B8 A8 B7 B6 A7 B5 A6 B4 A5 B3 A4 A3 A2 B2 A1 B1 A0 B0

예제#1

예제#1

중간 점검

Thread 클래스

예제: sleep() Pride will have a fall. Power is dangerous unless you have humility. Office changes manners. Empty vessels make the most sound.

인터럽트 인터럽트(interrupt)는 하나의 스레드가 실행하고 있는 작업을 중지하도록 하는 메카니즘이다. 그런데 만약 스레드가 실행 중에 한번도 sleep()을 호출하지 않는다면 InterruptedException를 받지못한다.

조인 join() 메소드는 하나의 스레드가 다른 스레드의 종료를 기다리게 하는 메소드이다.

예제

예제

실행결과 main: 추가적인 스레드를 시작합니다. main: 추가적인 스레드가 끝나기를 기다립니다. Thread-0: Pride will have a fall. Thread-0: Power is dangerous unless you have humility. main: 참을 수 없네요! Thread-0: 아직 끝나지 않았어요! main: 메인 스레드 종료!

스레드의 상태 그림23-4. 스레드이 상태

중간 점검

동기화 동기화(synchronization): 한 번에 하나의 스레드 만이 공유 데이터를 접근할 수 있도록 제어하는 것이 필요

동기화 기법 동기화란 쉽게 설명하면 공유된 자원 중에서 동시에 사용하면 안 되는 자원을 보호하는 도구이다.

스레드 간섭 스레드 간섭(thread interference)이란 서로 다른 스레드에서 실행되는 두 개의 연산이 동일한 데이터에 적용되면서 서로 겹치는 것을 의미 (예) 카운터 하나의 Counter 객체를 두개의 스레드가 공유하면서 카운터 값을 변경한다고 가정하자.

스레드 간섭 만약 스레드 A가 increment()를 호출하고 동시에 스레드 B가 derement(_)를 호출하였다고 가정하자.

문제 발생 다음과 같은 상황을 가정하자. 4개의 스레드가 하나의 카운터를 증가했다가 다시 감소한다.

예제

예제 ... -7 -8

실행결과 ... -7 -8

메모리 불일치 오류 메모리 불일치 오류는 서로 다른 스레드가 동일한 데이터의 값을 서로 다르게 볼 때, 발생한다. 스레드 A가 counter를 다음과 같이 증가하였다. 잠시 후에 스레드 B가 counter의 값을 출력한다.

동기화된 메소드 동기화된 메소드를 만들기 위해서는 synchronized 키워드를 메소드 선언에 붙이면 된다.

실행 결과 1 ...

중간점검 1 ...

스레드간의 조정 만약 두개의 스레드가 데이터를 주고 받는 경우에 발생 그림23-7. 생산자와 소비자 문제

스레드간의 조정 polling Event-driven

스레드 간의 조정 방법

스레드 간의 조정 방법 wait()가 호출되면 스레드는 가지고 있던 락을 해제하고 실행을 일시 중지한다.

wait()와 notify() 그림23-8. wait() notify()

생산자/소비자 문제 생산자는 데이터를 생산하고 소비자는 데이터를 가지고 어떤 작업을 한다. 생산자-소비자 문제에서 중요한 것은 생산자가 생산하기 전에 소비자가 물건을 가져가면 안된다. 반대로 이전 물건을 소비하기 전에 생산하면 안 된다. ☞ 동기화된 메소드를 사용하여 두 개의 스레드가 동시에 버퍼 객체에 접근하는 것을 막는다. 동기 화된 apthsem는 synchronized키워드를 메소드 앞에 붙여서 만든다. ☞ 케익을 생산하고 가져가는 동작을 일치시키기 위하여 두 개의 스레드를 동기화할 수 있는 어떤 방법이 필요하다. 스레드 간의 동작을 일치하기 위하여 사용하는 메소드들이 wait() notify()이다. 이들 메소드를 이용하여 생산이 되었음을 소비자에게 명시적으로 알리고 또 한 소비가 되었음을 명시적으로 생산자에게 알릴 수 있다.

생산자/소비자 문제에 적용 먼저 케익을 임시적으로 보관하는 Buffer 클래스를 작성한다.

생산자/소비자 문제에 적용

생산자/소비자 문제에 적용 그림23-9. 생산자와 소비자 문제

예제 생산자를 코딩하여 보자 이번에는 같은 방식으로 소비자 스레드를 작성한다.

예제 마지막으로 메인 스레드를 작성하여 준다.

실행결과 만약 wait(), notifyall()을 사용하지 않고 무조건 케익을 가져가고 생산한다면 다음과 같이 잘못된 결과가 나온다.

실행결과