티스토리 뷰
프로그램을 개발하다보면 main스레드 외에 추가적인 스레드가 필요할 때가 있다.
예를들어, 어떠한 데이터를 받아오면서 화면에 출력하는 작업을 동시에 하고자 할 때 하나의 스레드만 사용하게 된다면 모든 데이터를 받아오기 전까지는 화면에 출력하는 작업을 진행하지 못하게 된다. 이때, 데이터를 받아오는 스레드와 화면에 출력하는 스레드를 서로 분리한다면 위 작업을 동시에 실행할 수 있게된다. 이처럼 프로그램을 개발하다보면 멀티스레드 환경이 요구되는 상황이 발생할 수 있다.
자바에서 스레드를 생성하는 방법에는 크게 두가지가 있다.
첫번째는, Thread 클래스로부터 집적 생성하는 방법이며 두번째는, Thread 하위 클래스로부터 생성하는 것이다.
Thread 클래스로부터 집적 생성
Runnable
인터페이스를 구현하여 클래스를 작성한다.
클래스 내부에는 run()
이라는 스레드가 실행할 코드를 작성해야 한다.
class Task implements Runnable {
public void run() {
//스레드가 실행할 코드
}
}
이제 이렇게 만든 Task객체를를 스레드로 만드는 방법은 여러가지가 존재한다.
Runnable task = new Task();
Thread thread = new Thread(task);
//or
//익명객체 사용
Thread thread = new Thread(new Runnable() {});
//or
//람다식 사용
Thread thread = new Thread( () -> {})
이후에는 thread.start()
를 통해 스레드를 실행할 수 있다. 이러면 클래스 내부의 run()
메소드가 실행된다.
이렇게 Thread 클래스로 부터 집적 생성을 하게되면 Runnable
인터페이스를 구현한 클래스를 작성하고 해당 클래스를 Thread객체에 넘겨 스레드를 생성하는 과정이 필요하다.
Thread 하위 클래스로부터 생성
이번엔 집적 Thread
클래스를 상속받는 방법이다.
class Task extends Thread {
@Override
public void run() {}
}
Thread thread = new Task();
Thread클래스를 상속받으면 이렇게 바로 스레드를 생성하는 것이 가능하다.
스레드의 이름
메인 스레드의 이름은 main
이다.
이후 작업 스레드를 생성하게 되면 Thread-n
의 이름을 가진다. 스레드의 이름을 확인하고 싶으면 thread.getName()
을 통해 얻을 수 있으며 thread.setName()
을 통해 스레드의 이름을 설정하는 것도 가능하다.
또한, Thread thread = Thread.currentThread()
라는 static메소드를 통해 현재 스레드를 받아오는 것도 가능하다. 메인에서 해당 함수를 실행하면 main
스레드가 thread에 담기게 된다.
public static void main (String[] args) {
Thread thread = Thread.currentThread();
System.out.println(thread.getName()); //결과 : main
}
'Java' 카테고리의 다른 글
[JAVA] 자바 스트림(Stream) (0) | 2022.03.12 |
---|---|
[JAVA] 자바 스레드 풀(Thread Pool) (0) | 2022.03.04 |
[JAVA] 자바 스레드 우선순위 및 동기화 (0) | 2022.03.04 |
[JAVA] 자바 객체를 복제하는 방법 (0) | 2022.03.03 |
[JAVA] 자바 예외처리와 예외 클래스 (0) | 2022.03.03 |
- Total
- Today
- Yesterday
- nodeJS
- 중앙대학교
- 자바스크립트
- 백준
- 그리디
- 알고리즘
- ReactNative
- 자바
- 재귀
- dfs
- 동적계획법
- java
- 구현
- boj
- nestjs
- 컴퓨터 구조
- 세그먼트 트리
- 스레드
- 그래프
- 예외처리
- 투포인터
- BFS
- node.js
- 컴퓨터 통신
- nest.js
- typeORM
- 백트래킹
- Computer Architecture
- 시뮬레이션
- 벨만포드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |