-
데몬 스레드와 사용자 스레드
사용자 스레드 : 우선순위가 높은 스레드로. main() 이 해당. main에서 호출한 스레드도 모두 사용자 스레드이다. 상속에 의해서. 이 사용자 스레드 들이 모두 종료되면 JVM이 종료되며 프로그램이 끝난다.
데몬 스레드 : 우선수위가 낮은 스레드로 보조 스레드 개념. 가비지 컬렉터가 대표적 예시. 사용자 스레드와 달리 JVM이 실행이 끝날때까지 기다려주지 않는다. 사용자 스레드가 끝나면 함께 종료
왜 사용하나?
프로그램 실행 중 비교적 중요도가 떨어지는 프로그램을 실행하기 위해서. 백그라운드에서 실행되며 주 스레드가 종료 될 때 자동으로 종료되기 때문에 사용자가 직접 관리하지 않아도 된다.
자동저장, 가비지 컬렉션, 사용자 모니터링이 이에 해당한다.
runnable vs thread
runnable은 인터페이스이다. 실제, 객체를 실행하려면 new thread(runnable).start() 와 같이 스레드 객체 안에 인터페이스를 구현한 객체를 넣어주어야 한다. 이는 thread.start() 만 실행하면 되는 스레드 클래스보다 불편하다.
근데 왜 사용?
자바에서 클래스는 하나밖에 상속이 안됨. 즉, 다중상속이 허용이 안된다. 때문에, 다른 클래스를 상속받은 클래스를 스레드로 만들기 위해서는 runnable 인터페이스를 사용하여 상속 받아야 할 것이다.
run() vs start()
둘 다 실행시키는 것. 단, run은 main과 같은 역할. start는 스레드를 생성하여 실행하는 것
실제로 run() 을 사용하여 스레드를 실행시키면, 새로운 스레드가 만들어지는 것이 아니라 main 스레드 위에 스택으로 쌓이게 되어 병렬처리의 의미가 없어짐. 즉, 병렬처리를 하고 싶으면(스레드 사용 목적) start 메소드를 사용하여야 함
참고
https://sharonprogress.tistory.com/324
https://tecoble.techcourse.co.kr/post/2021-04-26-BigInteger_BigDecimal/