Java에서 multithreading은 CPU를 최대한 활용하기 위해 둘 이상의 스레드를 동시에 실행하는 프로세스를 의미합니다. Java의 스레드는 프로세스 리소스를 만들고 공유하는데 더 적은 리소스가 필요한 lightweight라고 할 수 있다.
Multithreading과 Multiprocessing은 Java에서 멀티태스킹에 사용되지만, 통상 Multiprocessing보다 Multithreading을 더 선호한다고 합니다. 이유는 스레드가 공유 메모리 영역을 사용하여 메모리 영역을 사용하여 메모리 절약하는데 도움이 되고 스레드 간의 내용 전환이 프로세스보다 조금 더 빠르기 때문입니다.
Multithreading의 장점은:
스레드의 life cycle에는 5계의 단계가 있으며, JVM(Java Virtual Machine)에 의해 제어가 됩니다.
New -> Runnable -> Running -> Non-Runnable(Blocked) -> Terminated
새 스레드가 시작될 때, new thread 혹은 born thread라고 합니다. New Thread는 Thread 클래스에서 인스턴스를 만들고 난 후 생성이 되며, start()메서드를 호출하기 전 상태를 말합니다.
새로 생성된 스레드가 시작된 후에 스레드 실행이 가능해집니다. Runnable 상태에서 스레드는 작업을 실행합니다.
Thread scheduler가 스레드를 선택하게 되면, 해당 스레드는 Runnable에서 Running 상태로 변경됩니다.
Thread는 Non-Runnable 상태에서 여전히 활성 상태이지만 샐행 할 수는 없는 상태입니다.
run() 메서드가 정상적으로 수행이 되거나, 세그먼테이션 오류 또는 처리되지 않은 예외와 같이 비정상적인 오류로 인해 Terminated 상태가 될 수 있습니다.
그 외 sleep(), wait() 등 다양한 메소드가 존재한다.