일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Data Structure
- 그레이들
- Graph
- Javascript
- 백준
- Database
- DP
- 다이나믹 프로그래밍
- 자바
- vscode
- java
- 리트코드
- VIM
- BFS
- 프로그래머스
- TypeScript
- react
- git
- Algorithm
- 안드로이드
- frontend
- DFS
- 동적 계획법
- network
- CS
- db
- LeetCode
- Redux
- 알고리즘
- Python
- Today
- Total
늘 겸손하게
Java Thread 기초 이론 본문
안녕하세요 besforyou입니다
이번글은 자바 스레드 기초 입니다
스레드(thread)
- 운영체제에 의해 관리되는 하나의 작업 혹은 테스크
멀티 스레딩 ( Multi-threading )
- 하나의 응용 프로그램이 여러 개의 스레드를 생성하고, 각 스레드가 하나의 작업을 처리하는 기법을 말한다.
- 하나의 응용 프로그램에 속한 스레드는 변수 메모리, 파일 오픈 테이블 등 자원을 공유하므로, 문맥 교환(context-switch)에 따른 오버헤드가 매우 작다.
- 대부분의 운영체제가 멀티스레딩을 기본으로 하고 있다.
멀티 프로세싱(Multi-processing) 과 멀티 스레딩 (multi-threading)
멀티 태스킹을 구현하는 기술은 멀티 프로세싱(multi-processing)과 멀티스레딩(multi-threading)이 있습니다.
멀티 프로세싱 기법은 여러 개의 프로세스를 만들고, 각 프로세스가 하나의 작업을 처리하는 기법이라면,
멀티 스레딩 기법은 여러 개의 스레드를 생성하고, 각 스레드가 하나의 작업을 처리하는 기법입니다.
대부분의 운영체제는 멀티스레딩이 기본
왜?
멀티프로세싱 기법에서 여러 개의 프로세스를 생성할때 각 프로세스가 독립된 메모리 영역을 보유하고, 프로세스 사이의 context-switch에 따른 오버헤드 크기가 큰 반면에 멀티스레딩 기법은 스레드가 같은 변수 메모리, 파일 오픈 테이블 등의 자원을 공유하므로 context-switch에 따른 오버헤드 크기가 작아 시간 소모가 적습니다.
그렇기 때문에 멀티스레딩이 대부분의 운영체제에서 기본입니다.
자바 스레드
- 자바 가상 기계(JVM)에 의해 스케줄되는 실행 단위의 코드 블럭
- 스레드의 생명 주기는 JVM에 의해 관리됨 : JVM은 스레드 단위로 스케줄링
JVM과 자바의 멀티스레딩
- 하나의 JVM은 하나의 자바 응용 프로그램만 실행
- 응용 프로그램은 하나 이상의 스레드로 구성 가능
결국 JVM이 여러 개의 스레드를 관리하므로 개발자는 스레드 코드를 작성하고 JVM이 스레드 코드를 실행하도록 하면 된다.
자바 스레드를 이용한 타이머 예제 코드
1. TimerThread.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import javax.swing.*;
public class TimerThread extends Thread {
JLabel timerLabel;
public TimerThread(JLabel timerLabel) {
this.timerLabel = timerLabel;
}
public void run() {
int n = 0;
while (true) {
timerLabel.setText(Integer.toString(n));
n++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) { return ; }
}
}
}
|
cs |
2. ThreadTimerEx.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import javax.swing.*;
import java.awt.*;
public class ThreadTimerEx extends JFrame {
public ThreadTimerEx() {
setTitle("Thread를 상속받은 타이머 스레드 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JLabel timerLabel = new JLabel();
timerLabel.setFont(new Font("Gothic", Font.ITALIC, 80));
c.add(timerLabel);
TimerThread th = new TimerThread(timerLabel);
setSize(250,150);
setVisible(true);
th.start();
}
public static void main(String [] args) {
new ThreadTimerEx();
}
}
|
cs |
'Programming > Java' 카테고리의 다른 글
Java ArrayList 정렬 with Collections (0) | 2022.02.13 |
---|---|
백준 BufferedReader, BufferedWriter로 입출력 (0) | 2022.02.09 |
Java 객체 인자로 전달, 레퍼런스 (0) | 2022.02.08 |
Java 특징 정리 (0) | 2022.02.07 |
Java Abstract methods and Classes ( 추상메소드 , 클래스 ) (0) | 2021.09.08 |