swimminginthecode DIVE!

BACK/JAVA Basic

JAVA 12

dazz6 2024. 4. 18. 18:15
Process(프로세스) 와 Thread (스레드)
하나의 응용프로그램은 운영체제에 의해 process(작업 단위)를 확보하고, 응용프로그램의 실행은 thread(실행 단위)가 담당한다. 기본적으로 main thread 에 의해 응용 프로그램이 실행되며, thread의 갯수 만큼 실행 단위를 늘릴 수 있다. (멀티 thread에 의한 멀티 tasking이 가능)

Thread 와 Runnable
Thread 클래스를 사용하거나 Runnable 인터페이스를 구현하여 사용할 수 있다.
종류 특징
Thread 클래스를 상속받은 경우, 상속받은 클래스 자체를 스레드로 사용할 수 있다.
Thread 클래스의 메소드 (getName())을 바로 사용할 수 있다.
Runnable 해당 클래스를 인스턴스화해서 Thread 생성자에 argument로 넘겨 줘야 한다.
run()을 호출하면 Runnable 인터페이스에서 구현한 run()이 호출되므로 따로 오버라이딩하지 않아도 된다.
getName()을 사용하려면 Thread 클래스의 currentThread() 를 호출하여 현재 스레드에 대한 참조를 얻어오는 방법을 통해서만 호출이 가능하다.

run() 과 start()
스레드의 실행은 run() 호출이 아닌 start() 호출로 해야 한다.

run()과 start() 두 메소드 모두 같은 작업을 하지만, run() 메소드를 사용하면 스레드를 사용하는 것이 아님

종류 특징
run() main()의 콜스택* 하나만 이용하는 것으로 스레드를 활용하지 않고 스레드 객체의 run()을 호출하는 것
start() 스레드가 작업을 실행하는 데 필요한 콜스택을 생성한 다음 run()을 호출해서 그 스택 안에 run()을 저장할 수 있도록 하는 것

* 콜스택(call stack) : 컴퓨터 프로그램에서 현재 실행 중인 서브 루틴에 관한 정보를 저장하는 스택 자료 구조


thread 상태 제어
종류 설명
.sleep() 주어진 시간 동안 일시 정지 상태가 되고, 다시 실행 대시 상태로 돌아감
참고 : 밀리세컨드(1/000) 단위
.yield() 실행 대기 상태로 돌아가고 동일한 우선순위 또는 높은 우선순위를 갖는 다른 스레드가 실행 기회를 가질 수 있도록 양보함 
.join() 자신이 하던 작업을 잠시 멈추고 다른 스레드가 지정된 시간 동안 작업을 수행하도록 함

thread 우선 순위
스레드가 수행하는 작업의 중요도에 따라 우선순위를 서로 다르게 지정하여 특정 스레드가 더 많은 작업시간을 갖도록 할 수 있다.
thread.setPriority(종류_PRIORITY);
종류
MAX_PRIORITY 10, 최대 우선순위*
MIN_PRIOTITY 1, 최소 우선순위
NORM_PRIORITY 5, 보통 우선순위

* 참고 : 숫자가 높을수록 우선순위가 높음 

'BACK > JAVA Basic' 카테고리의 다른 글

JAVA 14  (0) 2024.04.30
JAVA 13  (0) 2024.04.19
JAVA 11  (0) 2024.04.17
JAVA 10  (0) 2024.04.15
JAVA 09  (0) 2024.04.12