SlideShare a Scribd company logo
1 of 11
Download to read offline
by 홍석주
Java Thread
+ Process
프로세스
• 실행 중인 프로그램

• 프로그램을 실행하면 OS로 부터 자원(메모리)을 받음

• 각 독립된 메모리 영역을 할당 받는다. (Code, Data, Stack, Heap)
Code: 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
Data: 전역변수, 정적변수, 배열 등 초기화된 데이터
Heap: 동적 할당시 사용
Stack: 지역변수, 매개변수 리턴 값 임시 메모리 영역
멀티 프로세스
• 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업 처리

• 독립적이라 다른 프로세스에 영향이 가지 않음(안정적)

• 멀티 스레드보다 많은 메모리와 CPU 시간 차지

• 빈번한 Context Switching으로 성능 저하 우려
쓰레드
• 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 자원들은 공유한다

• 즉, 프로세스 내에서 Stack만 할당 받고 Code, Data, Heap 영역은 공유
멀티 쓰레드
• 하나의 응용 프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리

• 시스템의 자원과 처리 비용 감소

• Context Switching이 빠름(Stack 영역만 처리하면 되기 때문)

• 그 외 자원(Code, Data, Heap)을 공유하여 통신 부담이 적음

• 스레드 하나 이상 생기면 다 죽어버림..
생전 고인의 마지막 모습…
쓰레드를 알아야 하는 이유?
스프링 어디서든 다 쓰인다..
• Tomcat - Thread Pool
새로운 Thread 생성에는 은근 많은 비용이 든다고 한다.
클라이언트가 서버 접속 시 쓰레드를 할당받아 Servlet 로직을 탄다
쓰레드를 알아야 하는 이유?
스프링 어디서든 다 쓰인다..
• Tomcat - Thread Pool
Pool에 쓰레드를 미리 만든 다음에 가용 개수까지 자유롭게 쓰고
반환해주면 된다.
쓰레드를 알아야 하는 이유?
스프링 어디서든 다 쓰인다..
• Security - Thread Local
해당 쓰레드만의 전용 보관소를 만들어 준다.
Security ContextHolder에서 사용자 정보를 보관할 때 사용
구현 방법
1 - Thread를 상속받음
package thread;
public class ThreadWithClass extends Thread {
@Override
public void run() {
for (int i=0; i<5; i++) {
System.out.println(getName());
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
구현 방법
2 - 인터페이스 구현
package thread;
public class ThreadWithRunnable implements Runnable {
@Override
public void run() {
for (int i=0; i<5; i++) {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
사용
둘다 start을 실행해주면 된다!
package thread;
public class ThreadApp {
public static void main(String[] args) {
ThreadWithClass thread1 = new ThreadWithClass();
Thread thread2 = new Thread(new ThreadWithRunnable());
thread1.start();
thread2.start();
}
}

More Related Content

Similar to 쓰레드.pdf

OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfHo Jeong Im
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안Lee Ji Eun
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Gruter
 
Cache cloud 최종
Cache cloud 최종Cache cloud 최종
Cache cloud 최종nexusz99
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍Yong Joon Moon
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.SeungWoo Lee
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기Yungon Park
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료shanka2
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arcNAVER D2
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개중선 곽
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조Choonghyun Yang
 

Similar to 쓰레드.pdf (20)

OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
Thread programming
Thread programmingThread programming
Thread programming
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
Cache cloud 최종
Cache cloud 최종Cache cloud 최종
Cache cloud 최종
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
 
Network researching
Network researchingNetwork researching
Network researching
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료
 
Java memory
Java memoryJava memory
Java memory
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조
 

More from Seokju Hong

API 문서화.pdf
API 문서화.pdfAPI 문서화.pdf
API 문서화.pdfSeokju Hong
 
트랜잭션_인덱싱.pdf
트랜잭션_인덱싱.pdf트랜잭션_인덱싱.pdf
트랜잭션_인덱싱.pdfSeokju Hong
 
자바8정리.pdf
자바8정리.pdf자바8정리.pdf
자바8정리.pdfSeokju Hong
 
타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.KeySeokju Hong
 
Mvc 패턴
Mvc 패턴Mvc 패턴
Mvc 패턴Seokju Hong
 

More from Seokju Hong (7)

API 문서화.pdf
API 문서화.pdfAPI 문서화.pdf
API 문서화.pdf
 
트랜잭션_인덱싱.pdf
트랜잭션_인덱싱.pdf트랜잭션_인덱싱.pdf
트랜잭션_인덱싱.pdf
 
자바8정리.pdf
자바8정리.pdf자바8정리.pdf
자바8정리.pdf
 
DB Index.pdf
DB Index.pdfDB Index.pdf
DB Index.pdf
 
validation.pdf
validation.pdfvalidation.pdf
validation.pdf
 
타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key
 
Mvc 패턴
Mvc 패턴Mvc 패턴
Mvc 패턴
 

Recently uploaded

코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다ultrasuperrok
 
바리스타이론기초-1 수정 후 111111111111111111111111
바리스타이론기초-1 수정 후 111111111111111111111111바리스타이론기초-1 수정 후 111111111111111111111111
바리스타이론기초-1 수정 후 111111111111111111111111a01091282057
 
TDM(Text Data Mining) Studio manual(2024)
TDM(Text Data Mining) Studio manual(2024)TDM(Text Data Mining) Studio manual(2024)
TDM(Text Data Mining) Studio manual(2024)yonseilibrary
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.ultrasuperrok
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.ultrasuperrok
 
친환경, 그린, 탄소저감 미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료
친환경, 그린, 탄소저감  미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료친환경, 그린, 탄소저감  미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료
친환경, 그린, 탄소저감 미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료Seongwon Kim
 

Recently uploaded (6)

코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
 
바리스타이론기초-1 수정 후 111111111111111111111111
바리스타이론기초-1 수정 후 111111111111111111111111바리스타이론기초-1 수정 후 111111111111111111111111
바리스타이론기초-1 수정 후 111111111111111111111111
 
TDM(Text Data Mining) Studio manual(2024)
TDM(Text Data Mining) Studio manual(2024)TDM(Text Data Mining) Studio manual(2024)
TDM(Text Data Mining) Studio manual(2024)
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
 
친환경, 그린, 탄소저감 미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료
친환경, 그린, 탄소저감  미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료친환경, 그린, 탄소저감  미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료
친환경, 그린, 탄소저감 미래 교육 공간 디자인의 이해와 사례들에 대한 강의 자료
 

쓰레드.pdf

  • 2. 프로세스 • 실행 중인 프로그램 • 프로그램을 실행하면 OS로 부터 자원(메모리)을 받음 • 각 독립된 메모리 영역을 할당 받는다. (Code, Data, Stack, Heap) Code: 코드 자체를 구성하는 메모리 영역 (프로그램 명령) Data: 전역변수, 정적변수, 배열 등 초기화된 데이터 Heap: 동적 할당시 사용 Stack: 지역변수, 매개변수 리턴 값 임시 메모리 영역
  • 3. 멀티 프로세스 • 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업 처리 • 독립적이라 다른 프로세스에 영향이 가지 않음(안정적) • 멀티 스레드보다 많은 메모리와 CPU 시간 차지 • 빈번한 Context Switching으로 성능 저하 우려
  • 4. 쓰레드 • 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 자원들은 공유한다 • 즉, 프로세스 내에서 Stack만 할당 받고 Code, Data, Heap 영역은 공유
  • 5. 멀티 쓰레드 • 하나의 응용 프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리 • 시스템의 자원과 처리 비용 감소 • Context Switching이 빠름(Stack 영역만 처리하면 되기 때문) • 그 외 자원(Code, Data, Heap)을 공유하여 통신 부담이 적음 • 스레드 하나 이상 생기면 다 죽어버림.. 생전 고인의 마지막 모습…
  • 6. 쓰레드를 알아야 하는 이유? 스프링 어디서든 다 쓰인다.. • Tomcat - Thread Pool 새로운 Thread 생성에는 은근 많은 비용이 든다고 한다. 클라이언트가 서버 접속 시 쓰레드를 할당받아 Servlet 로직을 탄다
  • 7. 쓰레드를 알아야 하는 이유? 스프링 어디서든 다 쓰인다.. • Tomcat - Thread Pool Pool에 쓰레드를 미리 만든 다음에 가용 개수까지 자유롭게 쓰고 반환해주면 된다.
  • 8. 쓰레드를 알아야 하는 이유? 스프링 어디서든 다 쓰인다.. • Security - Thread Local 해당 쓰레드만의 전용 보관소를 만들어 준다. Security ContextHolder에서 사용자 정보를 보관할 때 사용
  • 9. 구현 방법 1 - Thread를 상속받음 package thread; public class ThreadWithClass extends Thread { @Override public void run() { for (int i=0; i<5; i++) { System.out.println(getName()); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }
  • 10. 구현 방법 2 - 인터페이스 구현 package thread; public class ThreadWithRunnable implements Runnable { @Override public void run() { for (int i=0; i<5; i++) { System.out.println(Thread.currentThread().getName()); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }
  • 11. 사용 둘다 start을 실행해주면 된다! package thread; public class ThreadApp { public static void main(String[] args) { ThreadWithClass thread1 = new ThreadWithClass(); Thread thread2 = new Thread(new ThreadWithRunnable()); thread1.start(); thread2.start(); } }