'thread'에 해당되는 글 3건
멀티 스레드_5
- 스레드 상태 제어
: 스레드의 상태를 변경하는 것. -> 정교한 스레드 상태 제어가 필요
1. interrupt() :
일시 정지 상태의 스레드에서 interruptedException 예외를 발생시켜, 예외처리코드(catch)에서 실행 대기상태 or 종료 상태로 갈 수 있도록 함
미래에 일시 정지 상태가 되면/ 일시 정지일 때 interrupt() 발생 시켜면 예외 발생
2. nofify() / notifyAll()
: 동기화 블록 내에서 wait() 메소드에 의해 일시 정지 상태 스레드 -> 실행 대기 상태로
3. wait() / wait(long millis)
: 동기화 블록 내에서 스레드를 일시 정지 상태로 만듬. 매개값으로 주어진 시간 지나면 자동적으로 실행 대기 상태 됨. 시간 없을 시 nofify() 통해 실행 대기 상태로 갈 수 있음
4. resume()
: suspend() 메소드에 의해 일시 정지 상태 스레드 -> 실행 대기 상태로
5. suspend()
: 스레드가 일시 정지 상태로 만듬. resume() 메소드 호출하면 다시 실행 대기 상태로 됨
6. sleep(long millis)
: 주어진 시간 동안 스레드를 일시 정지 상태로 만든다. 시간 지나면 자동으로 실행 대기 상태
ex)Thread.sleep(1000); -> 1초 잠듬
7. join() /join(long millis)
: join() 메소드 호출한 스레드는 일시 정지 상태. 실행 대기 상태로 갈려면 join() 메소드를 멤버로 갖는 스레드가 종료 되거나 매개값으로 주어진 시간 지나야 함
계산을 다 마친 후 값을 가져와야 하는 경우. 다른 스레드의 종료를 기다렸다가 실행해야 하는 경우
8. yield()
: 실행 중 우선순위 동일한 다른 스레드에게 실행 양보하고 실행 대기 상태가 됨 -> 반복문 많이 실행하는데 무의미한 반복 계속 될 때 다른 스레드에게 양보하고 자신이 실행 대기 상태 가는 것 -> 성능에 도움됨
9. stop()
: 스레드 즉시 종료 -> 경우에 따라 실행 중인 스레드 종료할 필요가 있다. ex) 동영상 끝까지 안보고 멈춤 요구할 경우
** 경우에 따라 교대 작업이 필요한 경우, 자신의 작업이 끝나면 상대방 스레드 일시 정지 상태 풀어주고, 자신은 일시정지 상태로 만든다 -> 공유 객체 때문
- 공유 객체는 두 스레드가 작업할 내용을 각각 동기화 메소드로 구분해 놓고, 한 스레드 작업 완료하면 notify() 메소드 호출해 일시 정지 있는 다른 메소드 실행 대기 상태로 만들고, 자신은 두번 작업하지 않기 위해 wait()으로 일시 정지 상태 만듦.
- notify() : wait()로 인해 일시 정지된 스레드 중 한 개를 실행 대기로 만든다
- notifyAll() : wait()으로 일시 정지된 모든 스레드를 실행 대기 상태로 만든다
* 이 메소드들은 Object 클래스에 선언된 메소드 이므로 모든 공유 객체에서 호출 가능. but,동기화 메소드 또는 블록 내에서만 사용 가능
- 데몬 스레드
: 주 스레드의 작업을 돋는 보조적인 역할을 수행하는 보조 스레드.
주 스레드 종료되면 강제적으로 자동 종료 됨.
ex) 미디어 플레이어의 영상/음악 재생(데몬 스레드), 미디어 플레이어(주 스레드)
- 스레드 그룹 : 관련된 스레드를 묶어서 관리할 목적으로 이용
- 스레드 풀
: 병렬 작업 처리가 많아지면 스레드 개수가 증가되고 그에 다른 스레드 생성과 스케줄링으로 인해 cpu가 바빠져 메모리 사용량이 늘어남. -> 성능 저하
스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해놓고 큐에 들어오는 작업들을 하나씩 스레드가 맡아서 처리. 작업처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업 가져와 처리
-> 작업 처리 요청 폭등해도 스레드의 전체 개수가 늘어나지 않으므로 성능 급격히 저하되지 않는다.
-<이것이 자바다1>. 한빛 미디어
'Code > JAVA' 카테고리의 다른 글
| 멀티 스레드 예제_join() (0) | 2019.06.19 |
|---|---|
| 멀티 스레드 예제_BeepThread (0) | 2019.06.19 |
| 멀티 스레드_4 (0) | 2019.06.19 |
| 멀티 스레드_3 (0) | 2019.06.19 |
| 멀티 스레드_2 (0) | 2019.06.18 |
멀티 스레드_2
- 메인 스레드(Main thread)
main() 메소드 실행하면 시작됨
첫 코드부터 차례로 순차적으로 실행, 마지막 코드 or return 만나면 실행 종료
- 어떤 자바건 메인 스레드는 반드시 존재. 작업 이외의 추가적인 병렬 작업의 수만큼 스레드 생성
1. java.lang.Thread 클래스 객체화 생성 가능
ex)class Task implements Runnable
ex)Thread thread = new Thread(Runnable target); //생성자 호출
runnable 은 작업 스레드가 실행할 수 있는 코드를 가지고 있는 개체, 인터페이스 타입이기 때문에 구현 객체 만들어 대입, 실체 스레드 아님
public void run(){} -> 재정의해서 작업 스레드가 실행할 코드 작성
ex) 1) 기본
class A implements Runnable{ //Runnable 구현
public void run(){ //인터페이스 구현을 받아서 재정의 필요
//실행문
}
}
class b {
public static void main(String[] args){
Runnable task = new A(); //Runnable를 구현하는 A를 만들고
Thread thread = new Thread(task); //스레드로 만들어
thread.start(); //실행
//메인에서 돌아갈 스레드 만들기
}
}
2) Runnable 익명 객체 이용
Thread thread = new Thread(new Runnable(){
@override
public void run(){
//실행문
}
});
3) 람다식 이용
Thread thread = new Thread(()-> {
//실행문
});
2. Thread 상속해 하위 클래스 만들어 생성 가능
: 작업 스레드가 실행할 작업을 Runnable로 만들지 않고, Thread의 하위 클래스로 작업 스레드를 정의하면서 작업 내용 포함 가능
ex) public class A extends Thread {
@override
public void run(){
//실행문
}
}
public class b {
public void main(String[] args){
Thread thread = new A();
thread.start(); //스레드 실행
}
}
ex) 익명 객체
Thread thread = new Thread(){
public void run(){
//실행문
}
}
- Thread 호출 -> thread.start(); 를 통해 run() 실행
멀티 스레드_1
- 프로세스
운영체제에서는 실행 중인 하나의 애플리케이션
사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는 것
- 멀티 태스킹
: 두 가지 이상의 작업을 동시에 처리하는 것
운영체제는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당하고, 병렬로 실행시킴
- 스레드 : 한 가닥의 실. 한가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어 놓았다해서 유래된 이름
* 멀티 태스킹 != 멀티 스레드
* 멀티 프로세스 > 프로세스들 > 하나의 프로세스 안 싱글 스레드, 멀티 스레드 존재
- 멀티 프로세스
: 운영체제에서 할당받은 자신의 메모리 가지고 실행하기 때문에 서로 독립적 -> 오류 발생해도 다른 프로세스 영향 미치지 않음
BUT, 멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외 발생 시키면 프로세스 자체가 종료 될 수 있어서 다른 스레드에 영향 미치게 됨 -> 예외 처리 중요
- 멀티 스레드는 실행중인 어플리케이션 하나라도 있으면, 프로세스 종료되지 않음
- 사용
대용량 데이터의처리 시간을 줄이기 위해 데이터를 분할해 병렬로 처리하는 곳, UI를 가지고 있는 애플리케이션에서 네트워크 통신하기 위해 사용
다수 클라이언트의 요청을 처리하는 서버 개발할 때에도 사용
애플리케이션 개발에 중요한 기능이기 때문에 이해 필요
-<이것이 자바다1>. 한빛 미디어