SlideShare une entreprise Scribd logo
1  sur  23
Concurrent Programming
Java 스레드 다루기
자바카페 자바강의식 스터디
이정근 cjred77@gmail.com
목차
1. 병렬과 병행과 동시성의 차이
2. 스레드
3. 병행 태스크
4. 프로세스
1. 병렬과 병행의 차이
• 병행(Concurrent) 프로그래밍은 쉽게 말해 멀티스레드 프로그래밍이다.
• 병렬(Parallel) 프로그래밍은 MPI, OpenMP, CUDA 와 같은 라이브러리를
활용한 멀티코어 프로그래밍이다.
http://palpit.tistory.com/728
http://www.gamedevforever.com/291
2. 스레드
2.1. 스레드 시작하기
2.1. Runnable 인터페이스
2.3. Sleep() 잠자기…
2.4. 스레드가 종료될때까지 기다리기
• 스레드는 run() 메서드가 반환될때 종료된다.
http://www.slideserve.com/myra-snyder/visual-c-programming-tree-control-multithread
2.5. 스레드 로컬변수
• 스레드안에서만 사용되는 공유변수
일반적인 정적변수
두개 이상의 스레드에서 정적변수사용시 문제가 발생할 수 있음.
NumberFormat.getCurrencyInstance() :
현재 지역의 화폐 양식을 나타내는 NumberFormat 객체를 반환
(링크 : http://dreamzelkova.tistory.com/entry/JAVA-숫자-통화-클래스)
스레드별로 인스턴스 한 개를 생성(ThreadLocal 사용)
ThreadLocal 변수의 사용
total = 1001245
amountDue = 1,001,245
ThreadLocal.withInitial(…) :
초기값을 가지는 ThreadLocal 변수를 생성
2.6. 데몬(daemon) 스레드
• 데몬스레드가 아닌 다른 일반 스레드의 작업을 돕는 보조적인 역할을 수행
• 일반스레드가 모두 종료되면 데몬 스레드는 강제적으로 자동 종료
• 예를 들어 가지비 컬렉터, 워드 프로세서의 자동 저장, 화면 자동 갱신 등
• 스레드를 생성한 다음 실행전에 setDaemon(true)를 호출
3. 병행 태스크
• 스레드의 용도
• 서버/클라언트 관계에서 클라이언트의 요청을 처리
• 복잡하고 다량의 데이터를 분산처리
• 주기적인 간단한 백그라운드 작업처리
• …
짧은 시간동안만 실행되는 태스트(task)에서 일일히 스레드 생성해서 사용하는 것은
스레드의 생성과 소멸 시간의 낭비로서 비효율적이다.
강도 높은 계산을 수행하는 태스크일때 태스크별로 스레드를 사용하는 대신, 프로세서
별로 스레드를 하나씩 사용해서 스레드 사이에서 스위칭(switching) 하는 오버헤드를
피하는 게 좋다.(병렬 프로그래밍)
자바 병행성 라이브러리(java.util.concurrent) 의 Executor 는 다음과 같은 특징을 지닌다.
• JAVA 5에서 처음 도입
• 스레드 풀을 사용
• 무거운 스레드는 미리 할당 가능
• 태스크와 스레드를 생성하고 관리하는 것을 분리
• 스레드 풀안의 스레드는 한번에 하나씩 여러 태스크를 실행
• 태스크 큐를 이용해 태스크를 관리
• ExecutorService 를 더이상 필요 없으면 중지
• ExecutorService가 멈추면 모든 스레드도 중지
Executor 인터페이스 : 태스크와 스레드를 분리하고 실행을 담당
ExecutorService 인터페이스 : Executor 인터페이스를 확장하여 라이프 사이클을 제어
Executors 클래스 : 다양한 executor 서비스의 인스턴스를 생성하는 Factory 클래스
Future 인터페이스 : 태스크가 중지되었는지 아닌지를 확인하거나 태스크로부터 응답 획득
3.1. 주요 클래스와 인터페이스
실행자(executor)는 테스크를 수행할 스레드를 선택해서 태스크를 실행한다.
3.2. 태스크 실행하기
유동적으로 스레드를 생성하는 스레드풀을 사용하는 실행자
고정된 크기의 스레드를 생성하는 스레드풀을 사용하는 실행자
Callable 인터페이스
3.3. 퓨처와 실행자 서비스
• Callable 인터페이스의 call 메서드는 Runnable 인터페이스의 run 메서드와 달리
값을 리턴한다.
• 임의의 예외를 던질 수도 있다.
Callable을 실행하려면 ExecutorService 인터페이스의 인스턴스가 필요하다.
Executors 클래스의 newCachedThreadPool 과 newFixedThreadPool 메서드가
ExecutorService 객체를 돌려준다.
• 태스크를 제출(submit)하면 퓨처(future)를 얻게 되는데,
퓨처 객체는 언젠간 결제를 얻게 되는 계산을 표현한다.
Future 인터페이스의 메서드
• get 메서드 : 결과를 얻거나 타임아웃에 이를 때까지 대기한다.
• cancel 메서드 : 태스크 취소를 시도한다.
• 태스트가 아직 실행중이 아니면 해당 태스크는 스케줄링되지 않는다.
• 태스크가 이미 실행 중이고, mayInterruptIfRunning 이 true면 해당 태스크
를 실행하는 스레드가 인터럽트된다.
• isCanncelled() 메서드 : 해당 태스크가 cancel 되었는지 조회한다.
• isDone 메서드 : 해당 태스크가 Done 되었는지 조회한다.
invokeAll 메서드를 사용하여 Callable 인스턴스의 Collection을 전달하여
한번에 태스크를 제출
• 타임아웃을 파라미터로 받아서 해당 시간동안 완료 되지 않는 태스크를 취소하
는 형태도 가능.
8. 프로세스
• 다른 프로그램을 실행해야 할 때
• Runtime.exec() : java 5 이전에 사용.
• Process : 별도의 운영체제 프로세스에서 실행하고, 표준 입력, 표준 출력, 표준 오류
스트림과 상호작용
• ProcessBuilder : Process 객체를 설정하는 기능을 제공
다른 프로그램을 실행할때 명령을 구성하는 List<String> 이나 문자열을 전달하면 된다.
다른 프로그램을 실행할때 명령을 구성하는 List<String> 이나 문자열을 전달하면 된다.
프로세스의 표준 입력, 표준 출력, 표준오류 스트림을 가져온다.
작업 디렉토리를 변경한다.
https://github.com/redrebel/TIL/tree/master/language/java

Contenu connexe

Tendances

Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programmingByeongsu Kang
 
Tcp ip & io model
Tcp ip & io modelTcp ip & io model
Tcp ip & io modelNam Hyeonuk
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet ArchitectureJU Chae
 
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 CHeesuk Kang
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것흥배 최
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
가상화된 코드를 분석해보자
가상화된 코드를 분석해보자가상화된 코드를 분석해보자
가상화된 코드를 분석해보자dkswognsdi
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)MinChul Lee
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
 
More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)경섭 심
 
Asynchronous 101 (2)
Asynchronous 101 (2)Asynchronous 101 (2)
Asynchronous 101 (2)MinChul Lee
 
[15]Android Kotlin을 통한 개발 전략
[15]Android Kotlin을 통한 개발 전략[15]Android Kotlin을 통한 개발 전략
[15]Android Kotlin을 통한 개발 전략NAVER Engineering
 
thread_seminar
thread_seminarthread_seminar
thread_seminarU.g. Yong
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttpNAVER D2
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfHYUNWOO KIM
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 

Tendances (20)

Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
Tcp ip & io model
Tcp ip & io modelTcp ip & io model
Tcp ip & io model
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
 
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 C
 
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
Database
DatabaseDatabase
Database
 
Stage2
Stage2Stage2
Stage2
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
가상화된 코드를 분석해보자
가상화된 코드를 분석해보자가상화된 코드를 분석해보자
가상화된 코드를 분석해보자
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)
 
Servlet3
Servlet3Servlet3
Servlet3
 
Asynchronous 101 (2)
Asynchronous 101 (2)Asynchronous 101 (2)
Asynchronous 101 (2)
 
[15]Android Kotlin을 통한 개발 전략
[15]Android Kotlin을 통한 개발 전략[15]Android Kotlin을 통한 개발 전략
[15]Android Kotlin을 통한 개발 전략
 
thread_seminar
thread_seminarthread_seminar
thread_seminar
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - OkHttp
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdf
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 

En vedette

1차시 smart education
1차시 smart education1차시 smart education
1차시 smart educationJaechoon Jo
 
주식 기술적 분석#3 (추세선)
주식 기술적 분석#3 (추세선)주식 기술적 분석#3 (추세선)
주식 기술적 분석#3 (추세선)Ant House
 
[BIZ+005 스타트업 투자/법률 기초편] 첫 투자를 위한 스타트업 기초상식 | 비즈업 조가연님
[BIZ+005 스타트업 투자/법률 기초편] 첫 투자를 위한 스타트업 기초상식 | 비즈업 조가연님 [BIZ+005 스타트업 투자/법률 기초편] 첫 투자를 위한 스타트업 기초상식 | 비즈업 조가연님
[BIZ+005 스타트업 투자/법률 기초편] 첫 투자를 위한 스타트업 기초상식 | 비즈업 조가연님 BIZ+
 
[한국어] Neural Architecture Search with Reinforcement Learning
[한국어] Neural Architecture Search with Reinforcement Learning[한국어] Neural Architecture Search with Reinforcement Learning
[한국어] Neural Architecture Search with Reinforcement LearningKiho Suh
 
Reinforcement learning v0.5
Reinforcement learning v0.5Reinforcement learning v0.5
Reinforcement learning v0.5SANG WON PARK
 
머피의 머신러닝: Undirencted Graphical Model
머피의 머신러닝: Undirencted Graphical Model머피의 머신러닝: Undirencted Graphical Model
머피의 머신러닝: Undirencted Graphical ModelJungkyu Lee
 
Machine Learning Foundations (a case study approach) 강의 정리
Machine Learning Foundations (a case study approach) 강의 정리Machine Learning Foundations (a case study approach) 강의 정리
Machine Learning Foundations (a case study approach) 강의 정리SANG WON PARK
 
[한국어] Multiagent Bidirectional- Coordinated Nets for Learning to Play StarCra...
[한국어] Multiagent Bidirectional- Coordinated Nets for Learning to Play StarCra...[한국어] Multiagent Bidirectional- Coordinated Nets for Learning to Play StarCra...
[한국어] Multiagent Bidirectional- Coordinated Nets for Learning to Play StarCra...Kiho Suh
 
알파고 해부하기 3부
알파고 해부하기 3부알파고 해부하기 3부
알파고 해부하기 3부Donghun Lee
 
20160409 microsoft 세미나 머신러닝관련 발표자료
20160409 microsoft 세미나 머신러닝관련 발표자료20160409 microsoft 세미나 머신러닝관련 발표자료
20160409 microsoft 세미나 머신러닝관련 발표자료JungGeun Lee
 
기계 학습의 현재와 미래
기계 학습의 현재와 미래기계 학습의 현재와 미래
기계 학습의 현재와 미래Joon Kim
 
STRONG KOREA 20130609
STRONG KOREA 20130609STRONG KOREA 20130609
STRONG KOREA 20130609Leo Kim
 
기술적분석 16 trix
기술적분석 16 trix기술적분석 16 trix
기술적분석 16 trixAnt House
 
기술적분석16 sonar
기술적분석16 sonar기술적분석16 sonar
기술적분석16 sonarAnt House
 
알파고 학습 이해하기
알파고 학습 이해하기알파고 학습 이해하기
알파고 학습 이해하기도형 임
 
파이썬으로 나만의 강화학습 환경 만들기
파이썬으로 나만의 강화학습 환경 만들기파이썬으로 나만의 강화학습 환경 만들기
파이썬으로 나만의 강화학습 환경 만들기정주 김
 
강화 학습 기초 Reinforcement Learning an introduction
강화 학습 기초 Reinforcement Learning an introduction강화 학습 기초 Reinforcement Learning an introduction
강화 학습 기초 Reinforcement Learning an introductionTaehoon Kim
 

En vedette (20)

1차시 smart education
1차시 smart education1차시 smart education
1차시 smart education
 
주식 기술적 분석#3 (추세선)
주식 기술적 분석#3 (추세선)주식 기술적 분석#3 (추세선)
주식 기술적 분석#3 (추세선)
 
[BIZ+005 스타트업 투자/법률 기초편] 첫 투자를 위한 스타트업 기초상식 | 비즈업 조가연님
[BIZ+005 스타트업 투자/법률 기초편] 첫 투자를 위한 스타트업 기초상식 | 비즈업 조가연님 [BIZ+005 스타트업 투자/법률 기초편] 첫 투자를 위한 스타트업 기초상식 | 비즈업 조가연님
[BIZ+005 스타트업 투자/법률 기초편] 첫 투자를 위한 스타트업 기초상식 | 비즈업 조가연님
 
[한국어] Neural Architecture Search with Reinforcement Learning
[한국어] Neural Architecture Search with Reinforcement Learning[한국어] Neural Architecture Search with Reinforcement Learning
[한국어] Neural Architecture Search with Reinforcement Learning
 
Reinforcement learning v0.5
Reinforcement learning v0.5Reinforcement learning v0.5
Reinforcement learning v0.5
 
머피의 머신러닝: Undirencted Graphical Model
머피의 머신러닝: Undirencted Graphical Model머피의 머신러닝: Undirencted Graphical Model
머피의 머신러닝: Undirencted Graphical Model
 
4차산업혁명
4차산업혁명4차산업혁명
4차산업혁명
 
Machine Learning Foundations (a case study approach) 강의 정리
Machine Learning Foundations (a case study approach) 강의 정리Machine Learning Foundations (a case study approach) 강의 정리
Machine Learning Foundations (a case study approach) 강의 정리
 
[한국어] Multiagent Bidirectional- Coordinated Nets for Learning to Play StarCra...
[한국어] Multiagent Bidirectional- Coordinated Nets for Learning to Play StarCra...[한국어] Multiagent Bidirectional- Coordinated Nets for Learning to Play StarCra...
[한국어] Multiagent Bidirectional- Coordinated Nets for Learning to Play StarCra...
 
알파고 해부하기 3부
알파고 해부하기 3부알파고 해부하기 3부
알파고 해부하기 3부
 
20160409 microsoft 세미나 머신러닝관련 발표자료
20160409 microsoft 세미나 머신러닝관련 발표자료20160409 microsoft 세미나 머신러닝관련 발표자료
20160409 microsoft 세미나 머신러닝관련 발표자료
 
기계 학습의 현재와 미래
기계 학습의 현재와 미래기계 학습의 현재와 미래
기계 학습의 현재와 미래
 
STRONG KOREA 20130609
STRONG KOREA 20130609STRONG KOREA 20130609
STRONG KOREA 20130609
 
파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝
 
인공지능을 위한 뇌과학
인공지능을 위한 뇌과학인공지능을 위한 뇌과학
인공지능을 위한 뇌과학
 
기술적분석 16 trix
기술적분석 16 trix기술적분석 16 trix
기술적분석 16 trix
 
기술적분석16 sonar
기술적분석16 sonar기술적분석16 sonar
기술적분석16 sonar
 
알파고 학습 이해하기
알파고 학습 이해하기알파고 학습 이해하기
알파고 학습 이해하기
 
파이썬으로 나만의 강화학습 환경 만들기
파이썬으로 나만의 강화학습 환경 만들기파이썬으로 나만의 강화학습 환경 만들기
파이썬으로 나만의 강화학습 환경 만들기
 
강화 학습 기초 Reinforcement Learning an introduction
강화 학습 기초 Reinforcement Learning an introduction강화 학습 기초 Reinforcement Learning an introduction
강화 학습 기초 Reinforcement Learning an introduction
 

Similaire à Concurrent Programming (Java thread 다루기)

Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&Csys4u
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본ssuser0c2478
 
자바 8
자바 8자바 8
자바 8신 한
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍흥배 최
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계Leonardo YongUk Kim
 
Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나병걸 윤
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍Hyunsoo Jung
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토Goonoo Kim
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Sung-jae Park
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍Yong Joon Moon
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)Hankyo
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Windosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxWindosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxHolyTak
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기jongho jeong
 
Windosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxWindosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxHolyTak
 

Similaire à Concurrent Programming (Java thread 다루기) (20)

Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&C
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본
 
자바 8
자바 8자바 8
자바 8
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 
Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나Hoons 닷넷 정기세미나
Hoons 닷넷 정기세미나
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Manage book project
Manage book projectManage book project
Manage book project
 
Manage book project
Manage book projectManage book project
Manage book project
 
Windosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxWindosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptx
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
Windosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptxWindosw via c 스터디23장.pptx
Windosw via c 스터디23장.pptx
 

Concurrent Programming (Java thread 다루기)

  • 1. Concurrent Programming Java 스레드 다루기 자바카페 자바강의식 스터디 이정근 cjred77@gmail.com
  • 2. 목차 1. 병렬과 병행과 동시성의 차이 2. 스레드 3. 병행 태스크 4. 프로세스
  • 3. 1. 병렬과 병행의 차이 • 병행(Concurrent) 프로그래밍은 쉽게 말해 멀티스레드 프로그래밍이다. • 병렬(Parallel) 프로그래밍은 MPI, OpenMP, CUDA 와 같은 라이브러리를 활용한 멀티코어 프로그래밍이다.
  • 6. 2. 스레드 2.1. 스레드 시작하기 2.1. Runnable 인터페이스
  • 7. 2.3. Sleep() 잠자기… 2.4. 스레드가 종료될때까지 기다리기 • 스레드는 run() 메서드가 반환될때 종료된다.
  • 9. 2.5. 스레드 로컬변수 • 스레드안에서만 사용되는 공유변수 일반적인 정적변수 두개 이상의 스레드에서 정적변수사용시 문제가 발생할 수 있음. NumberFormat.getCurrencyInstance() : 현재 지역의 화폐 양식을 나타내는 NumberFormat 객체를 반환 (링크 : http://dreamzelkova.tistory.com/entry/JAVA-숫자-통화-클래스)
  • 10. 스레드별로 인스턴스 한 개를 생성(ThreadLocal 사용) ThreadLocal 변수의 사용 total = 1001245 amountDue = 1,001,245 ThreadLocal.withInitial(…) : 초기값을 가지는 ThreadLocal 변수를 생성
  • 11. 2.6. 데몬(daemon) 스레드 • 데몬스레드가 아닌 다른 일반 스레드의 작업을 돕는 보조적인 역할을 수행 • 일반스레드가 모두 종료되면 데몬 스레드는 강제적으로 자동 종료 • 예를 들어 가지비 컬렉터, 워드 프로세서의 자동 저장, 화면 자동 갱신 등 • 스레드를 생성한 다음 실행전에 setDaemon(true)를 호출
  • 12. 3. 병행 태스크 • 스레드의 용도 • 서버/클라언트 관계에서 클라이언트의 요청을 처리 • 복잡하고 다량의 데이터를 분산처리 • 주기적인 간단한 백그라운드 작업처리 • … 짧은 시간동안만 실행되는 태스트(task)에서 일일히 스레드 생성해서 사용하는 것은 스레드의 생성과 소멸 시간의 낭비로서 비효율적이다. 강도 높은 계산을 수행하는 태스크일때 태스크별로 스레드를 사용하는 대신, 프로세서 별로 스레드를 하나씩 사용해서 스레드 사이에서 스위칭(switching) 하는 오버헤드를 피하는 게 좋다.(병렬 프로그래밍)
  • 13. 자바 병행성 라이브러리(java.util.concurrent) 의 Executor 는 다음과 같은 특징을 지닌다. • JAVA 5에서 처음 도입 • 스레드 풀을 사용 • 무거운 스레드는 미리 할당 가능 • 태스크와 스레드를 생성하고 관리하는 것을 분리 • 스레드 풀안의 스레드는 한번에 하나씩 여러 태스크를 실행 • 태스크 큐를 이용해 태스크를 관리 • ExecutorService 를 더이상 필요 없으면 중지 • ExecutorService가 멈추면 모든 스레드도 중지
  • 14. Executor 인터페이스 : 태스크와 스레드를 분리하고 실행을 담당 ExecutorService 인터페이스 : Executor 인터페이스를 확장하여 라이프 사이클을 제어 Executors 클래스 : 다양한 executor 서비스의 인스턴스를 생성하는 Factory 클래스 Future 인터페이스 : 태스크가 중지되었는지 아닌지를 확인하거나 태스크로부터 응답 획득 3.1. 주요 클래스와 인터페이스
  • 15. 실행자(executor)는 테스크를 수행할 스레드를 선택해서 태스크를 실행한다. 3.2. 태스크 실행하기 유동적으로 스레드를 생성하는 스레드풀을 사용하는 실행자 고정된 크기의 스레드를 생성하는 스레드풀을 사용하는 실행자
  • 16.
  • 17. Callable 인터페이스 3.3. 퓨처와 실행자 서비스 • Callable 인터페이스의 call 메서드는 Runnable 인터페이스의 run 메서드와 달리 값을 리턴한다. • 임의의 예외를 던질 수도 있다.
  • 18. Callable을 실행하려면 ExecutorService 인터페이스의 인스턴스가 필요하다. Executors 클래스의 newCachedThreadPool 과 newFixedThreadPool 메서드가 ExecutorService 객체를 돌려준다. • 태스크를 제출(submit)하면 퓨처(future)를 얻게 되는데, 퓨처 객체는 언젠간 결제를 얻게 되는 계산을 표현한다.
  • 19. Future 인터페이스의 메서드 • get 메서드 : 결과를 얻거나 타임아웃에 이를 때까지 대기한다. • cancel 메서드 : 태스크 취소를 시도한다. • 태스트가 아직 실행중이 아니면 해당 태스크는 스케줄링되지 않는다. • 태스크가 이미 실행 중이고, mayInterruptIfRunning 이 true면 해당 태스크 를 실행하는 스레드가 인터럽트된다. • isCanncelled() 메서드 : 해당 태스크가 cancel 되었는지 조회한다. • isDone 메서드 : 해당 태스크가 Done 되었는지 조회한다.
  • 20. invokeAll 메서드를 사용하여 Callable 인스턴스의 Collection을 전달하여 한번에 태스크를 제출 • 타임아웃을 파라미터로 받아서 해당 시간동안 완료 되지 않는 태스크를 취소하 는 형태도 가능.
  • 21. 8. 프로세스 • 다른 프로그램을 실행해야 할 때 • Runtime.exec() : java 5 이전에 사용. • Process : 별도의 운영체제 프로세스에서 실행하고, 표준 입력, 표준 출력, 표준 오류 스트림과 상호작용 • ProcessBuilder : Process 객체를 설정하는 기능을 제공 다른 프로그램을 실행할때 명령을 구성하는 List<String> 이나 문자열을 전달하면 된다.
  • 22. 다른 프로그램을 실행할때 명령을 구성하는 List<String> 이나 문자열을 전달하면 된다. 프로세스의 표준 입력, 표준 출력, 표준오류 스트림을 가져온다. 작업 디렉토리를 변경한다.