일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 프로그래머스 알고리즘 공부
- JavaScript
- 백준알고리즘
- 프로그래밍언어
- 알고리즘트레이닝
- 주식
- 화장품
- 돈
- Java
- 경제
- 알고리즘공부
- 성분
- algorithmTest
- 채권
- algorithmStudy
- C++
- 책을알려주는남자
- 지혜를가진흑곰
- 책알남
- algorithmtraining
- 재테크
- 자바
- 서평
- C
- 투자
- 자바스크립트
- 독후감
- 알고리즘 공부
- 독서
- 다독
- Today
- Total
탁월함은 어떻게 나오는가?
쓰레드(Thread)의 개념 본문
프로세스(process)란?
프로세스란 현재 실행 중인 프로그램(program)이다.
즉, 사용자가 작성한 프로그램이 운영체제의 의해 메모리 공간을 할당받아 실행 중인것을 말한다.
프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다.
스레드(thread)란?
쓰레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다.
멀티스레드의 장점
- cpu의 사용률을 향상
- 자원을 보다 효율적으로 사용할 수 있다
- 사용자에 대한 응답성이 향상
- 작업이 분리되어 코드가 간결해진다
다만, 멀티스레드 프로세스는 여러 스레드가 같은 프로세스 내에서 자원을 공유하면서 작업을 하기 때문에 발생할 수 있는 동기화(synchronization), 교착상태(deadlock) 같은 문제들을 고려해서 프로그래밍을 해야한다.
우리가 항상 사용하는 public static void main(String[] args) 메소드의 작업을 수행하는 것도 쓰레드이다. 프로그램을 실행하면 기본적으로 하나이상의 스레드가 실행하게 된다. 종료는 스레드가 하나도 없을때 종료된다.
스레드 구현 방법
자바에서 스레드를 생성하는방법은 2가지가 있다.
1.Runnable 인터페이스를 구현하는 방법
2.Thread 클래스를 상속받는 방법
두 방법 모두 스레드를 통해 작업하고 싶은 내용을 run()메소드에 작성하면 된다.
개인적으로 자바에는 다중상속이 없기때문에, Runnable 인터페이스으로 구현하는 방법이 재사용성이 높고 코드의 일관성을 유지할 수 있는 장점이 있다고 생각한다.
예제 :
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
31
32
33
34
35
36
37
38
39
|
public class ThreadTest {
static class ThreadWithClass extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("현재 실행중인 스레드의 이름을 반환 : " + getName());
try {
Thread.sleep(10); // 0.01초간 스레드를 멈춤
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
static class ThreadWithRunnale implements Runnable {
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();
}
}
}
}
public static void main(String[] args) {
ThreadTest.ThreadWithClass thread = new ThreadTest.ThreadWithClass();
Thread thread1 = new Thread(new ThreadTest.ThreadWithRunnale());
thread.start();
thread1.start();
}
}
|
cs |
'[Snow-ball]프로그래밍(컴퓨터) > java' 카테고리의 다른 글
[JAVA] String Constant Pool 이란? (String 객체 선언 방식에 대해서) (0) | 2021.07.13 |
---|---|
[JAVA] 문자열 비교연산자 == 와 equals() 의 차이점에 대해서 (0) | 2021.07.13 |
Java 언어의 특징 (0) | 2021.06.22 |
POJO - Plain Old Java Object , EJB - Enterprise JavaBeans 란? (0) | 2021.05.03 |
[JAVA] oracle real world object에 관해서. area와 field (0) | 2021.03.09 |