| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- framework
- maven
- SpringMVC
- springaop
- sqldeveloper
- 스프링
- javaprogramming
- sql
- js
- HTML
- 서브쿼리
- 메이븐
- PWA
- 자바프로그래밍
- 자바스크립트
- Oracle
- JavaScript 내장객체
- progressive web app
- tdd
- mybatis
- TIL
- 오라클
- TodayILearned
- web
- 생활코딩
- javascript
- 국비지원
- CSS
- 프로그레시브웹앱
- 프레임워크
- Today
- Total
1cm
자바 프로그래밍_Day_22_스레드(Thread)2 본문

2021. 09. 15
> 자바 스레드 스케쥴링 방식
-> 스레드 개수가 코어의 수보다 많을 경우 스레드를 어떤 순서로 동시성을 실행할 것인가를 결정하는 것.
-> 스케쥴링에 의해 스레드들은 번갈아가며 run()메소드를 조금씩 실행한다.
-> 1. 우선 순위 방식 (Priority)
-> 우선 순위가 높은 스레드가 작업 시간을 더 많이 가지도록 하는 스케쥴링 방식
-> 스레드에 1 ~ 10까지 우선 순위 번호 부여 가능 (번호가 높을수록 우선 순위가 높음)
-> 스레드 생성 시 우선 순위 기본값은 5
| 1 2 3 4 5 6 7 |
public class Run { public static void main(String[] args) { 클래스명 레퍼런스 = new 생성자(); //Thread를 상속한 객체 생성 레퍼런스.setPriority(1 ~ 10); } } Colored by Color Scripter |
cs |
-> 2. 순환 할당 방식 (Round-Robin)
-> 시간 할당량(Time Slice)를 정하여 하나의 스레드를 정해진 시간만큼 실행시키는 방식
-> JVM에 의해 정해짐 (코드로 제어 불가능)
> 스레드 컨트롤
-> 실행중인 스레드의 상태를 제어하기 위한 것으로 효율적이고 정교한 스케쥴링을 위한 스레드 상태를 제어하는 기능이다.

| 메소드 | 설명 |
| void interrupt() | sleep()나 join()에 의해 일시 정지 상태인 스레드를 실행 대기 상태로 만든다. 해당 쓰레드에서는 InterruptException이 발생하게 되어 일시 정지를 벗어난다. |
| void join() void join(long millis) void join(ling millis, int nanos) |
지정된 시간 동안 스레드가 실행되도록 한다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 스레드로 다시 돌아와 실행을 계속 한다. |
| static void sleep(long millis) static void sleep(long millis, int nanos) |
지정된 시간 동안 스레드를 일시 정지 시킨다. 지정한 시간이 지나고 나면, 자동적으로 다시 실행 대기 상태가 된다. |
| static void yield() | 실행 중에 다른 스레드에게 양보하고 실행 대기 상태가 된다. |
| void wait() void wait(long timeout) void wait(long timeout, int nanos) |
동기화된 블록 안에서 다른 스레드가 이 객체의 notify(), notifyAll()을 호출하거나 지정된 시간이 지날 때 까지 현재의 스레드를 대기시킨다. |
| void notify() | 동기화된 블록 안에서 호출한 객체 내부에 대기중인 스레드를 깨운다. 여러 스레드가 있을 경우 임의의 스레드 하나에만 통보한다. |
| void notifyAll() | 동기화된 블록 안에서 호출한 객체 내부에 대기중인 모든 스레드를 깨운다. 하지만 lock는 하나의 스레드만 얻을 수 있다. |
> 동기화(Synchronized)
-> 한 번에 한 개의 스레드만 프로세스 공유 자원(객체)에 접근할 수 있도록 락(Lock)을 걸어 다른 스레드가 진행중인 작업에 간섭하지 못하도록 하는 것을 말한다. 한 스레드가 진행한 뒤 다음 스레드가 실행 되는 경우 이전 스레드에서 실행하고 바뀐 상태의 객체를 이어서 실행하게 된다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
1. 동기화 메소드
public synchronized void method() {
//한 개의 스레드만 실행할 수 있음
}
2. 동기화 블록
public void method1() {
// 여러 스레드 실행할 수 있음
synchronized (공유객체) {
// 한 개의 스레드만 실행할 수 있음
}
// 여러 스레드 실행할 수 있음
}
|
cs |
-> 동기화 메소드를 다른 스레드가 접근하지 못하게 잠긴다.
> 데몬 스레드(Daemon Thread)
-> 다른 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드
-> 데몬 스레드 이외의 스레드들이 모두 종료되면 데몬 스레드는 강제적으로 종료된다.
> 데몬 스레드 생성
-> 데몬 스레드가 될 스레드의 레퍼런스 변수에 setDaemon(true)를 호출하여 생성
-> 단, start() 메소드 호출 전에 setDaemon(true)를 호출해야 한다. -> IllegalThreadStateException이 발생
> 스레드(Thread), 동기화(Synchronized) 실습 코드와 출력 결과
> chap2.sync.Buffer


> chap2.sync.Consumer

> chap2.sync.Producer

> chap2.Application


> Network_Server.thread.Receiver


'국비지원_Java > Java Programming_1' 카테고리의 다른 글
| 자바 프로그래밍_Day_24_Git 설치 (0) | 2021.09.26 |
|---|---|
| 자바 프로그래밍_Day_23_네트워크 프로그래밍 구현 평가 (0) | 2021.09.25 |
| 자바 프로그래밍_Day_21_네트워크(Network), 스레드(Thread) (0) | 2021.09.24 |
| 자바 프로그래밍_Day_20_제네릭스(Generics) (0) | 2021.09.21 |
| 자바 프로그래밍_Day_19_컬렉션(Collection) (0) | 2021.09.21 |