녕의 학습 기록
[Java] 멀티스레드 본문
* 프로세스 및 스레드 개념
프로세스는 실행 중인 하나의 애플리케이션이다.
만약에 크롬 브라우저를 두 개 띄워놨다면, 두개의 Chrome 프로세스가 생성된 것이라고 이해
멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것을 의미한다.
예로 미디어 플레이어는 동영상 재생과 소리 재생을 동시에 처리하는데
이를 가능하게 하는 것이 바로 멀티 스레드이다.
스레드란 한 가닥의 실 이라는 의미로, 하나의 스레드는 하나의 코드 실행 흐름이다.
미디어 플레이어에서 동영상 재생과 소리 재생은 각각 하나의 스레드( 실행 흐름 )라고 보면 될 거 같다.
멀티 프로세스는 자신의 메모리를 할당 받아 실행하기 때문에 독립적이다
ex ) 워드와 ppt를 실행 중에 워드에 오류 생겨도 ppt는 정상 작동한다
반면에 멀티 스레드는 독립적이지 못하다
ex) 채팅 프로그램에서 파일 전송 스레드에서 예외 발생 시 채팅 기능도 같이 종료가 된다
메인 스레드는 main()함수로부터 시작한다.
멀티 스레드도 싱글 스레드와 마찬가지로 메인 스레드에서 시작하고 필요에 의해 작업 스레드를 만들며 수행
만약 멀티스레드에서 메인 스레드 먼저 종료하고 나머지가 실행중이라면?
→ 당연히 프로세스는 종료 되지 않음
스레드의 개념에 대해 간단히 공부해봤는데 말그대로 멀티 태스킹을 위한 개념? 이라고 느낌
* 스레드 생성
1. Thread 클래스로부터 생성
Runnable은 객체이자 인터페이스 타입으로, 이를 구현한 객체 BeepTask
Runnable은 한개의 메서드 run()을 가지고 있다
구현 객체인 beepTask를 매개값으로 Thread 생성자 호출하면 작업 스레드가 생성된다
즉 해당 작업 스레드는 오버라이딩한 run 메서드 안의 작업을 수행하는 역할이다!!
쓰레드.start() => 매개값의 run() 실행
위 코드에서는 화면에 출력과 소리를 동시에 처리하는 코드로, 메인 스레드 포함 스레드 두개 이용했다
메인 스레드에서는 화면에 "띵" 출력, 작업 스레드인 beepTask에서는 효과음 발생
Thread.sleep()으로 사이에 텀? 일시정지? 주기를 주었다
앞서봤듯이 Thread는 독립적이지 않고 서로 영향을 미치기 때문에 예외처리 중요!
실행결과: 소리와 같이 출력
2. Thread 하위 클래스로부터 생성
Runnable 이용 하지 않고 Thread 클래스를 상속 받는 하위 클래스 이용
일반적인 객체 생성하듯이 작업 스레드 객체 생성했다
Thread thread = new ThreadEx();
마찬가지로 메인 스레드에서는 출력을, 작업 스레드에서는 효과음을 발생.
실행 결과도 동일하다
* 스레드 이름
메인 스레드의 이름은 "main"
외에 생성한 작업 스레드들의 이름은 "Thread-n(번호)"
스레드 객체.setName("이름") 를 통해 직접 이름 설정 가능
조회 시에는 스레드 객체.getName()
만약
Thread thread = Thread.currentThread();
//객체 참조를 가지고 있지 않다면 Thread의 정적 메서드 currentThread 를 이용하여
//스레드 참조 get
'Dev > Java' 카테고리의 다른 글
[Java] Map의 value 값들을 리스트로 반환받기 (0) | 2023.03.11 |
---|---|
[Java Exception] NoSuchBeanDefinitionException (0) | 2022.11.05 |
[Java Exception] java.lang.NullPointerException (0) | 2022.10.27 |
[Java] 인터페이스 (0) | 2022.08.06 |
[Java] 추상클래스 (0) | 2022.07.27 |