일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sql 데이터 삽입
- sns 샌드박스 종료
- Apache ab
- Foreign Key (외래 키)
- AWS SDK for JavaScript v3
- sql 데이터 추가
- Java
- EC2
- sms 휴대폰 인증
- aws sdk v3
- filezilla
- HTML 태그
- 스트레스툴
- PostgreSQL CAST
- html tag
- COALESCE함수
- 이것이 자바다
- node.js ec2
- npm 전역 설치 삭제
- HTML
- node.js
- Apache Benchmark
- 자바
- npm 글로벌 설치 삭제 했는데 실행됨
- ab 벤치마크
- node.js ec2 ip접속
- Primary key(기본 키)
- sms 샌드박스
- SMS sandbox
- node.js ec2 배포
- Today
- Total
망각에 재주 있는 나를 위해 기록하는 곳.
[자바/JAVA] Multi Thread(멀티 스레드) 본문
멀티 스레드를 말하기 전에 몇 가지를 정리해보면
먼저 프로세스(process)에 대해 간단히 말하면, 사람이 어떤 프로그램을 실행하면 그 프로그램은 운영체제로부터 실행에 필요한 메모리를 할당받아 코드를 실행한다. 이것이 프로세스이다.
멀티 태스킹(multi tasking)은 두 가지 이상의 작업을 동시에 하는 것이다.
멀티 태스킹은 두 가지 프로그램을 돌리는 것이라고 생각하면 된다. 이를테면 유튜브를 보면서 카톡을 주고받거나 음악을 들으면서 워드나 엑셀 작업을 하는 것이다. 이 같은 경우는 멀티 프로세스인 것이다.
멀티 태스킹은 반드시 멀티 프로세스를 말하는 것이 아니다. 한 프로세스 내에서도 멀티 태스킹이 일어난다.
메신저 같은 경우 서로 채팅을 주고받으면서 동시에 파일을 주고받을 수도 있다.
이것이 가능한 이유가 바로 멀티 스레드 때문이다.
스레드(Thread)라는 것은 하나의 코드 실행 흐름이다.
한 프로세스 내에 스레드가 하나일 수도 있고 두 개 이상일 수도 있다.
각 프로세스들은 운영체제에서 할당한 메모리를 가지고 실행하기 때문에 서로 독립적이다.
따라서 한 프로세스에 문제가 생겨도 다른 프로세스에 영향이 없다.
하지만 멀티 스레드는 한 프로세스 내부에 생성되기 때문에 하나가 문제가 생기면 다른 스레드에 영향을 준다.
스레드를 생성하는 방법
Thread 클래스로부터 직접 생성하는 방법을 보면 아래와 같이 Runnable을 매개 값으로 갖는 생성자를 호출해야 한다.
Thread thread = new Thread(Runnable target);
Runnable은 인터페이스 타입이다. 그래서 구현 객체를 만들어서 대입해야 한다.
Runnable은 run() 메서드 하나밖에 없다. 구현 클래스에서 run()을 오버라이딩하여 사용한다.
class Task implements Runnable {
public void run() {
스레드가 실행할 코드;
}
}
Runnable 구현 객체를 생성하고, 이것을 매개값으로 Thread 생성자를 호출하면 작업 스레드가 생성된다.
Runnable task = new Task();
Thread thread = new Thread(task); //task는 Runnable 타입의 매개변수
//=> Thread thread = new Thread(Runnable target);
또 다른 방법으로 Thread를 상속한 하위 클래스에서 작업하는 것이다.
public class WorkerThread extends Thread {
@Override
public void run() { // run()메서드 오버라이딩
// 스레드 실행 코드
}
}
Thread thread = new WorkerThread();
위는 Thread를 상속한 후 run()메서드를 오버라이딩한 것이다.
그리고 작업 스레드는 start() 메서드를 호출해야 비로소 실행한다.
thread.start();
// start() 메서드가 호출되면 run()메서드를 실행시키면서 작업을 한다.
'JAVA' 카테고리의 다른 글
[자바/JAVA] 스레드 우선순위(priority), 동기화(synchronized) (0) | 2021.07.13 |
---|---|
[자바/JAVA] String, StringBuffer, StringBuilder (0) | 2021.07.12 |
[자바] 데이터 타입, 배열 (0) | 2021.06.10 |