반도체의 성능이 시간이 가면 갈수록 싱글 코어의 성능의 증가 폭보다는, 코어 숫자의 증가폭이 더 커졌습니다.
https://www.researchgate.net/figure/Growth-in-processor-performance-over-40-years-HP11_fig3_340682076
따라서, 동시에 여러가지 프로그램들을 동시에 작동시킬 수 있는 프로그래밍 중요성이 증대되었습니다. (Concurrency)
두가지 방식 중, 멀티 쓰레드는 멀티 프로세스에 비해 시스템 자원을 효율적으로 사용할 수 있어서 어플리케이션 개발에 유용하게 사용되고 있습니다. Java도 멀티쓰레드 프로그래밍을 위한 지원을 초기버전부터 지원하고 있습니다.
메인 쓰레드는 java 프로그램이 시작 될 때, JVM에 의해 생성되는 쓰레드입니다.
메인 쓰레드를 시작으로 자식 쓰레드들이 쓰레드를 생성해 나갈 수 있습니다.
마지막에 실행 되어야 하는 쓰레드입니다. 메인 쓰레드에는 다양한 프로그램 종료 옵션들이 있습니다.
메인 쓰레드의 참조를 얻을 수 있습니다.
public static void main(String[] args) {
Thread mainThread = Thread.currentThread();
System.out.println(mainThread.getName());
}
public static void main(String[] args)
{
try
{
Thread.currentThread().join();
// the following statement will never execute because main thread join itself
System.out.println("This statement will never execute");
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
https://javagoal.com/main-thread-in-java/
위 사진에서도 볼 수 있듯이, 메인 쓰레드 옆에 데몬쓰레드라는것도 존재합니다.
데몬 쓰레드들은 보조적인 역할로 사용되는 쓰레드들 입니다 (GC, 모니터링 등..). 일반 쓰레드가 종료되면 데몬 쓰레드는 강제적으로 종료되는 특징이 있기 때문에, 지속적인 관찰이 필요한 어플리케이션에서 유용하게 사용할 수 있습니다. 메인 메소드 종료시에 무한 루프도 종료되기 때문입니다.
아래는 데몬 쓰레드를 설정할 수 있는 예제입니다.
public static void main(String[] args) {
Thread th = new ThreadExample();
th.setDaemon(true); // 데몬쓰레드들로 만들기.
th.start();
}