자바네트워크 제2주 실습 네트워크기초, 스레드.

Slides:



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

프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
어서와 Java는 처음이지! 제16장 스레드.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
스레드란? 멀티 태스킹(muli-tasking)는 여러 개의 애플리케이션을 동시에 실행하여서 컴퓨터 시스템의 성능을 높이기 위한 기법 그림23-1. 병철 처리의 예.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
1. C++ 시작하기.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
10장. 예외처리.
자바 5.0 프로그래밍.
C#.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
자바응용.
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
영상처리 실습 인공지능연구실.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
( Windows Service Application Debugging )
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
문자열 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
05. General Linear List – Homework
Flow Diagram IV While.
[INA240] Data Structures and Practice
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
함수, 모듈.
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
자바 객체 지향 프로그래밍 Ps lab 김윤경.
Power Java 제23장 스레드.
7 생성자 함수.
6 객체.
BoardGame 보드게임 따라가기.
20 XMLHttpRequest.
Presentation transcript:

자바네트워크 제2주 실습 네트워크기초, 스레드

스레드 이번 주의 프로젝트는 Chap02 로 한다 모든 프로그램은 Chap02 프로젝트에 새 클래스 로 작성한다. 모든 클래스는 패키지를 jnp.y2012 로 한다.

Chap02 프로젝트 생성 프로젝트명 입력 Chap02

Chap02 프로젝트 생성 빈 프로젝트 생성됨

예제 2-1 실습 Thread 클래스를 상속받은 클래스로 스 레드 구성 한 파일에 두 개의 클래스 선언 스레드가 하는 일은 단순히 화면에 문 장을 출력하는 것이다.

실행 클래스 추가 1

실행 클래스 추가 2 패키지명 jnp.y2012 클래스명 ExtendThreadTest 실행파일 조건

Thread를 상속받는 private 클래스 선언 3번~5번 줄 직접 입력 public class … 로 되어 있지 않고 class … 로 되어 있는 것은 이 클래스는 현재 파일 (ExtendThreadTest.java)에 있는 클래스들만 사용할 수 있는 private 클래스란 의미이다. public class … 형식으로 정의된 클래스는 반드시 클래스명과 파일 명이 일치해야 한다.

run 함수 구현 오른버튼 클릭 구현가능한 함수 중에 run 선택 주석 추가

생성된 코드 자동으로 추가된 주석 자동으로 구현된 run 함수

run 함수 수정 자동으로 추가된 super.run() 을 지우고 화면에 “Thread 클래스를 상속” 이라고 출력하는 문장을 삽입

main 함수 수정 Thread 인스턴스를 생성하고 start를 호출하여 스레드가 시작하도록 한다 run 이 종료하면 자동으로 Thread는 소멸한다.

예제 실행 오른버튼 클릭 실행 결과

예제 2-2 실습 Runnable 인터페이스를 구현한 클래스 로 스레드 구성 한 파일에 두 개의 클래스 선언 스레드가 하는 일은 단순히 화면에 문 장을 출력하는 것이다.

실행 클래스 추가 1

실행 클래스 추가 2 패키지명 jnp.y2012 클래스명 RunnableThreadTest 실행파일 조건

Runnable을 구현하는 private 클래스 선언 3번~5번 줄 직접 입력 public class … 로 되어 있지 않고 class … 로 되어 있는 것은 이 클래스는 현재 파일 (RunnableThreadTest.java)에 있는 클래스들만 사용할 수 있는 private 클래스란 의미이다. public class … 형식으로 정의된 클래스는 반드시 클래스명과 파일 명이 일치해야 한다.

구현가능한 함수 중에 run 선택 run 함수 구현 오른버튼 클릭 주석 추가

생성된 코드 자동으로 추가된 주석 자동으로 구현된 run 함수

run 함수 수정 화면에 “Runnable 인터페이스를 구현” 이라고 출력하는 문장을 삽입

main 함수 수정 Thread 인스턴스를 생성하고 start를 호출하여 스레드가 시작하도록 한다 run 이 종료하면 자동으로 Thread는 소멸한다.

예제 실행 오른버튼 클릭 실행 결과

예제 2-4 실습 Runnable 인터페이스를 구현한 클래스 로 스레드 구성 한 파일에 두 개의 클래스 선언 스레드가 하는 일은 단순히 화면에 문 장을 출력하는 것이다. 플래그를 확인하여 스레드를 종료 시 킨다. run 함수에서 항상 플래그를 체크하도 록 한다.

실행 클래스 추가 1

실행 클래스 추가 2 패키지명 jnp.y2012 클래스명 StopThreadTest 실행파일 조건

Runnable을 구현하는 private 클래스 선언 3번~5번 줄 직접 입력 public class … 로 되어 있지 않고 class … 로 되어 있는 것은 이 클래스는 현재 파일 (StopThreadTest.java)에 있는 클래스들만 사용할 수 있는 private 클래스란 의미이다. public class … 형식으로 정의된 클래스는 반드시 클래스명과 파일 명이 일치해야 한다.

구현가능한 함수 중에 run 선택 run 함수 구현 오른버튼 클릭 주석 추가

생성된 코드 자동으로 추가된 주석 자동으로 구현된 run 함수

run 함수 수정 스레드가 스톱요청을 받았는지를 판단하는 프래그 변수 stopped가 false 이면 스레드가 스톱요청을 받았는지를 판단하는 프래그 변수 stopped가 false 이면 화면에 “Thread is alive…” 이라고 출력하는 문장을 0.5초 마다 계속하여 반복함. Thread.sleep 함수는 오류가 발생할 수 있으므로 try~catrch 로 오류 처리를 해준다. stopped가 true가 되면 while 문이 종료하고 스레드가 종료 한다.

외부 인터페이스 함수 stop 추가 23번~25번 줄 직접 입력 stop 함수는 public 함수 이므로 클래스 외부에서 호출이 가능하고 이 함수를 호출하면 stopped 를 true로 설정하므로 이 함수가 호출된 후에 run 에서 while 루프가 종료하여 스레드가 종료한다.

StopThreadTest에 process 함수 추가 37번~48번 줄 직접 입력 실제로 스레드를 생성하고 종료 테스트를 하는 process 라는 함수를 추가함. main에 직접 작성할 수 있으 나 main을 간단하게 하고 프로그램 가독성을 높이기 위하여 함수로 작성함.

main 함수 수정 프로그램의 시작을 알리는 문장을 출력한다. 실행 클래스 인스턴스를 생성한다. 실행 클래스의 process 함수를 호출한다. 실행 클래스 인스턴스를 생성하는 이유는 process 함수가 static이 아니고 main은 static 이기 때문이다. 거의 모든 Java 프로그램은 이러한 형식을 취하고 있다.

예제 실행 오른버튼 클릭 실행 결과

실행결과 설명 main함수에서 인스턴스를 생성하기 전에 출력 process 함수에서 StopThread를 생성하고 start 함수를 호출하여 StopThread의 run 함수에서 0.5초에 한번씩 출력한 문장 process 함수에서 스레드를 시작 시킨 후에 1초간 멈춘 후에 StopThread의 stop 함수를 호출하여 플래그를 true로 만들어서 run의 while 루프가 종료하여 스레드가 종료함.

예제 2-5 실습 Runnable 인터페이스를 구현한 클래스 로 스레드 구성 한 파일에 두 개의 클래스 선언 스레드가 하는 일은 단순히 화면에 문 장을 출력하는 것이다. interrupt를 호출하여 스레드를 종료 시 킨다. run 함수에서 interrupt 되었는지를 체 크한다.

실행 클래스 추가 1

실행 클래스 추가 2 패키지명 jnp.y2012 클래스명 StopThreadTest 실행파일 조건

Runnable을 구현하는 private 클래스 선언 3번~5번 줄 직접 입력 public class … 로 되어 있지 않고 class … 로 되어 있는 것은 이 클래스는 현재 파일 (AdvancedStopThreadTest.java)에 있는 클래스들만 사용할 수 있는 private 클래스란 의미이다. public class … 형식으로 정의된 클래스는 반드시 클래스명과 파일 명이 일치해야 한다.

구현가능한 함수 중에 run 선택 run 함수 구현 오른버튼 클릭 주석 추가

생성된 코드 자동으로 추가된 주석 자동으로 구현된 run 함수

run 함수 수정 Interrupt되지 않았으면 화면에 “Thread is alive…” 이라고 출력하는 문장을 0.5초 마다 계속하여 반복함. Interrupt 오류는 예상한 오류 이므로 아무 행동도 하지 않는다. Interrupt도 오류중의 하나 이므로 try~catrch 로 오류 처리를 해준다. 오류가 발생하던 하지 않던 실행되는 문장

AdvancedStopThreadTest에 process 함수 추가 36번~47번 줄 직접 입력 실제로 스레드를 생성하고 종료 테스트를 하는 process 라는 함수를 추가함. main에 직접 작성할 수 있으 나 main을 간단하게 하고 프로그램 가독성을 높이기 위하여 함수로 작성함.

main 함수 수정 프로그램의 시작을 알리는 문장을 출력한다. 실행 클래스 인스턴스를 생성한다. 실행 클래스의 process 함수를 호출한다. 실행 클래스 인스턴스를 생성하는 이유는 process 함수가 static이 아니고 main은 static 이기 때문이다. 거의 모든 Java 프로그램은 이러한 형식을 취하고 있다.

예제 실행 오른버튼 클릭 실행 결과

실행결과 설명 main함수에서 인스턴스를 생성하기 전에 출력 process 함수에서 AdvancedStopThread를 생성하고 start 함수를 호출하여 AdvancedStopThread의 run 함수에서 0.5초에 한번씩 출력한 문장 process 함수에서 스레드를 시작 시킨 후에 1초간 멈춘 후에 Thread의 interrupt 함수를 호출하여 스레드에서 Interrupt 오류가 발생하게 하여 while 루프가 종료하여 스레드가 종료함.

예제 2-6 실습 main 에서는 스레드를 생성하고 바로 프로그램을 종료한다. 스레드에서는 5초 정도 기다렸다가 종 료 한다. 스레드 클래스를 따로 정의하지 않고 바로 생성해서 사용한다.

클래스 생성 NormalThreadTest

main 함수 수정 스레드를 생성하면서 바로 run 함수를 구현하여 따로 클래스를 만들지 않고 사용함. 간단할 경우에는 유용한 방법임. 스레드가 시작하면 5초를 기다린 후 메시지를 출력함. main은 스레드를 시작하고 바로 종료함.

예제 실행 첫 줄의 문장을 main에서 출력한 후 약 5초 후에 스레드에서 둘 째 줄 문장을 출력한 후 프로그램이 종료 함.

예제 2-7 실습 main 에서는 스레드를 생성하고 바로 프로그램을 종료한다. 스레드에서는 5초 정도 기다렸다가 종 료 한다. 스레드 클래스를 따로 정의하지 않고 바로 생성해서 사용한다. 스레드를 데몬 스레드로 설정하여 실 행한다.

클래스 생성 DaemonThreadTest

main 함수 수정 스레드를 생성하면서 바로 run 함수를 구현하여 따로 클래스를 만들지 않고 사용함. 간단할 경우에는 유용한 방법임. 스레드가 시작하면 5초를 기다린 후 메시지를 출력함. 데몬으로 설정함 main은 스레드를 시작하고 바로 종료함.

예제 실행 첫 줄의 문장을 main에서 출력한 후 스레드가 종료하는 것을 기다리지 않고 프로그램이 바로 종료해서 스레드의 출력이 나타나지 않음.

예제 2-8 실습 main 에서는 스레드를 생성한다. 스레드에서는 5초 정도 기다렸다가 종 료 한다. 스레드 클래스를 따로 정의하지 않고 바로 생성해서 사용한다. 스레드를 데몬 스레드로 설정하여 실 행한다. 스레드의 종료를 확인 한 후에 main을 종료한다.

클래스 생성 ThreadJoinTest

main 함수 수정 스레드를 생성하면서 바로 run 함수를 구현하여 따로 클래스를 만들지 않고 사용함. 간단할 경우에는 유용한 방법임. 스레드가 시작하면 5초를 기다린 후 메시지를 출력함. 데몬으로 설정하여 시작함 main은 스레드가 종료한 것을 확인하고 종료함.

예제 실행 스레드가 5초 기다린 후에 문장을 출력하여 종료 한 후에 main에서 출력한 후 프로그램이 종료 한다. 데몬 스레드가 아니라고 같이 동작한다.

예제 2-9 실습 main 에서는 스레드그룹을 생성한다. 스레드 목록을 보여준다.

클래스 생성 ThreadGroupTest

main 함수 수정 main 스레드 정보 출력 main 스레드의 하위 그룹 생성 tg1의 하위그룹 생성 각 그룹에 스레드 생성 스레드 그룹 출력

예제 실행 스레드 그룹의 내용이 출력된다. 스레드를 3개 만들었지만 실제 활동 중인 스레드는 하나 밖에 없는 것을 알 수 있다.

예제 2-10 실습 main 에서는 스레드그룹을 생성한다. 스레드의 우선 순위를 설정한다.

클래스 생성 PriorityThreadTest

PriorityThread 추가 예제 2-5 참고하여 추가 현재 스레드의 우선 순위 출력

main 함수 수정 메시지 출력 스레드 생성 및 시작 스레드의 우선 순위를 바꾸어 본다. 스레드 종료

예제 실행 스레드의 우선 순위가 바뀌어 출력된 것을 알 수 있고 10인 경우에는 두 번 출력 된 것을 알 수 있다. 이는 우선 순위가 높기 때문에 main 보다 더 자주 실행이 되었기 때문이다.

예제 2-11 실습 ThreadLocal의 사용 예를 보여준다.

클래스 생성 ThreadLocalTest ThreadLocalTest {

ThreadLocal 및 static 함수 추가 필요한 값 출력 함수

main 함수 수정 메시지 출력 스레드 정의 및 생성 스레드 생성시마다 counter 증가 스레드 내에서 메시지 출력 임의의 시간 지난 후 다시 메시지 출력 스레드 3개 생성 및 실행

예제 실행 스레드로컬의 값이 main에서는 83 각 스레드에서는 각각 241, 960, 329 인 것을 알 수 있고 ThreadLocalObject 변수는 하나 이지만 각 스레드에서 값이 다르게 유지 됨을 알 수 있다. 하지만 counter 값은 모든 스레드에서 값이 같다.

예제 2-12 실습 멀티스레드의 생산자-소비자 구조에 대한 예를 실습한다

공동으로 사용할 Queue 인터페이스 인터페이스명 Queue 인터페이스 추가

생성된 Queue.java

Queue 코드 수정 6번~10번 줄 직접 입력 Queue 동작에 필요한 함수들을 정의 하는 것임 put은 데이터 저장 pop은 데이터 추출 clear는 큐를 비운다 size는 현재 큐에 저장된 자료의 개수를 리턴한다

JobQueue 클래스 추가 클래스명 JobQueue 구현되는 Queue 인터페이스 main 함수는 추가하지 않는다.

JobQueue 코드 수정 싱글레톤 JobQueue 객체를 사용하도록 함. 객체를 추가할 수 있을 때 추가한다. 객체가 있을 때를 기다려서 존재하면 꺼낸다.

Producer 클래스 추가 클래스명 JobQueue 구현되는 Runnable 인터페이스 main 함수는 추가하지 않는다.

Producer 클래스 코드 구현 스레드가 종료하지 않으면 계속하여 정수를 숫자를 증가 시키면서 추가함.

Producer 클래스 추가 클래스명 JobQueue 구현되는 Runnable 인터페이스 main 함수는 추가하지 않는다.

Consumer 클래스 코드 구현 스레드가 종료하지 않으면 계속하여 객체를 추출하여 출력함

Tester 클래스 추가

main 함수 구현 싱글레톤 JobQueue를 얻는다 소비자 생성 및 시작 생산자 생성 및 시작 0.5초후 생산자 중단 0.5초후 소비자 중단

예제 실행 소비자가 생성 순서와 관계없이 실행이 되고 종료 함을 알 수 있다.

실습 추가 지금까지 해본 예제를 다시 반복해서 해볼 것