728x90

하나의 응용 프로그램에서 다수의 프로세스를 돌릴 때 사용한다.

여기서 한가지 짚고 넘어갈 점은 운영체제에서 제어권을 넘겨주며, 누가 먼저, 얼만큼 실행되는지 모른다.

멀티 스레드 예제와는 거리가 멀다.

위에 나와있는 코드는 멀티 스레드 예제라기 보다는 스레드를 이해하기에 앞서 기초적인 부분을 살펴본다.

클래스 A의 내부 함수를 모른다고 가정했을때,
출력문을 보고 2가지에 대해 알 수 있다.

1. A 클래스는 start() 함수를 갖는다.
A a = new B(); 로 upcasting으로 객체를 생성한 변수 a를 a.start(); 를 실행시켰다.
이것은 부모 클래스 A가 start() 함수를 갖고 있기 때문에 오류가 발생하지 않고, 실행이 될 수 있었다.

2. A 클래스의 start() 함수는 run() 함수를 갖는다.
A 클래스의 start() 함수를 실행시켰을때, B 클래스의 run() 함수가 동작하는 것을 확인할 수 있다.
우리는 B 클래스의 run()을 실행시킨 적이 없는데, 자동으로 출력이 된 것이다.
이는 A 클래스에 run() 함수가 존재하며, upcasting에 의해 부모는 자식의 클래스에 있는 run() 함수를 실행시켰다는 결론에 도달할 수 있다.

# blocking 함수
  1. Thread의 sleep()
  2. Scanner의 nextInt()

Thread의 내부 함수를 알 수 있는 예제 코드

앞에서 살펴본 예제를 통해 이번 예제에서 Thread 내부 함수에 대해 2가지를 알 수 있다.

1. Thread 클래스에는 start() 함수가 있다.
2. Thread 클래스에는 run() 함수가 있다.

이유는 앞에서 설명한 A 클래스와 동일하다.

Thread 예제 코드 1
Thread 예제 코드 2

운영체제에 의해 제어권이 Tiger와 Lion클래스에게 랜덤으로 주어지기 때문에 출력 결과창은 항상 랜덤으로 결과를 확인할 수 있다.

728x90

'웹 full stack 교육 > 이론' 카테고리의 다른 글

[Apache] Apache24 설치 및 삭제  (2) 2021.09.06
[Java] JavaFX 사용하기  (0) 2021.09.02
디자인 패턴  (0) 2021.09.01
[Java] LinkedList  (0) 2021.09.01
[Java] 자바 기타  (0) 2021.08.30

+ Recent posts