Thread : 메모리를 할당받은 프로세스에서 실질적인 작업을 수행하는 주체.
Process : "실행중인 프로그램" 을 의미.
Thread의 특징 :
"독립적"으로 일을 수행.
(스레드 객체들은 독립적으로 일을 수행 하고 있음을 이해 해야 한다)
=> A 객체가 있고, B 객체가 있으면, A 객체가 끝나고 B 객체가 실행되는게 아니라 !
A 객체를 실행시키고 곧바로 B 객체도 실행을 동시에 진행 !
프로세스가 실행되는 방식 :
1. 선점형 방식
우선순위 순서대로 자원(메모리)을 할당 받아 진행되는 방식.
단점 - 기아현상이 발생될 가능성이 있음.
기아현상 - 자원을 할당받지 못함을 의미한다.
why ? - 우선 순위에서 계속 계속 밀려버리면 실행이 안되기 때문이다.
2. 시간분할 방식
시간을 동일하게 배분하여 골고루 실행될 수 있도록 진행되는 방식.
장점 - 기존의 선점형 방식에서 우선 순위가 낮아 오~~~래 기다린 프로세스에게 우선순위를 높여준다.
(우선 순위가 낮아서 계속 대기하다가,, 어 얘 오래 기다렸네 ? 하고 우선 순위를 높여줘서 실행되게 하는 것이다)
OS(운영체제)의 '스케줄러' 가 담당한다.
정리 :
스레드 == 메모리를 할당받은 프로세스에서 실질적인 작업을 수행하는 주체.
프로세스 == "실행중인 프로그램" 을 의미.
참고 1 :
이클립스 아이콘을 더블클릭 - 실행상태 => 프로세스.
(일 (동작) 을 할 수 있게 메모리(자원)을 할당 받은 상태)
참고 2 :
자바는 거의 왠만한걸 다 만들어둬서 별도로 무언가를 선언하지 않고, 바로 스레드를 사용할 수 있다.
이클립스에서 구현하기
개념 :
// 이미 JAVA에서 구현한 Thread 클래스를 가져다가 사용할 수 있다.
// 즉, 코드를 재사용한다.
// 클래스가 이미 구현되어 있으니까 extends (상속)을 받아서 사용.
// 스레드 생명주기 (라이프 사이클)
// 생성 -> 대기 -> 수행 -> 데드
// 블록 : 자원(메모리) 을 할당 받지 못하도록 막아 놓은 상태.
(스레드 중간에 블록을 걸 수 있다)
생성 : 객체를 생성 하면 생성 된다.
대기 : 생성이 되면 즉시, 대기 상태가 된다.
(언제까지 ? 수행하기 전까지 ~)
수행 : 참조변수.start() 메서드를 사용해서
스레드 객체를 일하라고 명령을 내린다.
start() 메서드를 호출하면 내부의 run() 메서드를 수행하게 된다.
데드 : 주어진 run()을 다 수행하게 되면, 데드 상태가 된다.
1. class Th01은 Thread 클래스를 상속 받은 상태.
2. run() 메서드는 Thread 클래스에 존재하는 메서드 이다.
이것을 하위클래스인 Th01 클래스에서 사용하기 위해 오버라이딩을 한 상태.
1. class Th02은 Thread 클래스를 상속 받은 상태.
2. run() 메서드는 Thread 클래스에 존재하는 메서드 이다.
이것을 하위클래스인 Th02 클래스에서 사용하기 위해 오버라이딩을 한 상태.
1. main() 에서 Th01 클래스와 Th02 클래스의 객체를 생성 해준다.
2. 참조변수.start(); 로 각각의 스레드를 상속받은 클래스의 객체들이 run() 메서드를 실행 한다.
콘솔창을 확인해보면, 실행이 순서대로 되는 개념이 아닌것을 확인 할 수 있다.
++
sysout(i) 와
Thread.sleep(1500) 을 10번 반복 하는데,
한번 i를 출력하고, 1.5초 일시정지 후에
i+1 출력하고 또 1.5초 일시정지 후에
i+2 출력하고 또 1.5초 일시정지 후에
...
블록 : 자원(메모리)을 할당받지 못하도록 막아 놓은 상태.
=> sleep을 해서 일시적으로 메모리 할당을 막음.
'Java (국비) > Java 이론' 카테고리의 다른 글
파일 입출력 간단 정리 (0) | 2023.05.22 |
---|---|
스레드 (Thread) 간단 정리 2 (0) | 2023.05.22 |
예외와 예외처리 (0) | 2023.05.19 |
컬렉션 프레임워크 (집합 (Set)) (0) | 2023.05.19 |
컬렉션 프레임워크 (배열리스트 (ArrayList)) (0) | 2023.05.18 |