- thread를 만들었다는 것은 메인 사람 말고 새로운 사람이 생긴거라 생각하면 됨. 1명이 하던걸 2명이서 하는거 ㅇㅇ!
- main은 시작해라(start()) 알려주고 종료하고 끝. (main 시작 -> main: start해~ 난 종료할거임ㅋ -> main 종료 -> 연산 작업 실행(thread)
- 프로세스 내부 처리는 다른 애가 하는거임. 원래는 main이 혼자 다~ 하던거..!
🎯 Thread 클래스를 상속하는 예시
// Thread.sleep()은 일시중지. long millis(1/1000)초 동안은 실행 하지 마라! 즉 3초 후 실행해라!
- start()를 호출하면 Process 클래스에 오버라이드 된 run() 메소드가 호출되는 거야!
-> Thread가 가지고 있는 start() 메소드를 호출하는 것이 곧 run() 을 실행하는 것. 직접 호출이 아님! 그것이 약속이니까...☆
📰 콘솔창 결과
main 스따뜨, 종료가 먼저 뜨고 3초 후 스레드 작업 실행이 뜸. :)
- 1과 2의 동작 순서는 바뀔 수 있다.
- 2개고 3개고 다 다른 줄기에서 새롭게 시작하는 것. 나뭇가지처럼 메인줄기에서 요쪽 저쪽 잔가지처럼 process는 별개로 실행된당.
🎯 Runnable 인터페이스를 구현하는 예시
1. class Robot 생성
2. Robot 클래스를 상속받는 WashRobot 클래스 생성
// 다중 상속이 안 되니까 인터페이스 구현을 통해 thread 생성하긩 (implements Runnable)
- Runnable 인터페이스르 구현한 클래스는 Thread로 바꿔주어야 한다. -> 그래야 run()이 동작!
- Robot robot1 = new WashRobot("로봇 a"); 로 생성 불가 -> Runnable 혹은 WashRobot으로 생성 후 Thread 생성해서 Runnable Target을 매개변수로.
📰 콘솔창 결과
-> 위에서 말했듯 동작 순서는 바뀔 수 있기 때문에 실행할 때마다 순서가 달라진다