쓰레드의 구현과 실행

0

쓰레드의 구현과 실행

1. Thread클래스를 상속

  • 자바는 단일상속만 가능하기 때문에 다른 클래스를 상속받을 경우도 대비해서 밑에 방법이 더 좋다.

2. Runnable 인터페이스를 구현


-> 상속받던, 구현하던 run이라는 메서드를 구현해야하는 것은 동일하다.



-> thread를 상속받는 경우에는 this(생략가능).getName()으로 호출하고,
runnable을 구현하는 경우에는 Thread.currentThread().getName()을 이용한다.

  • 쓰레드 안쓰려면 그냥 Ex13_1 클래스에 넣으면 됨.
    그대신 결과는 다름.
    클래스에 넣으면 순차적으로 실행되는데, 쓰레드로 하면 실행결과가 섞임

  • 쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.

    -> 먼저 start했다고 먼저 실행되는거 아님!
    t1이 시작될지 t2가 먼저 시작될지 모름.
    쓰레드를 start하면 실행가능한 상태가 되는거지 바로 실행되는 것이 아님!!
    언제 실행될지는 OS스케줄러가 실행순서를 결정한다.

start()와 run()

: run()을 작성했는데 왜 start로 실행하는가?

  • 쓰레드는 생성과 실행의 과정을 거친다.
  1. main 메서드에서 start를 호출하면 호출스택에서 start와 main이 올라감(1번그림)
  2. start메서드가 새로운 호출스택을 생성함 (2번그림)
  3. run()을 올림 -> start의 역할 끝. 종료됨
  4. 각각의 쓰레드가 본인만의 호출스택을 가지고 별도로 실행함. -> 서로 독립적인 작업을 수행할 수 있음.
    start를 이용하지 않으면 한 호출스택에 run과 main이 올라가서 한쓰레드에서만 돌아감
    ↳ start를 이용해야만 새로운 호출스택이 생기고 새로운 쓰레드가 올라갈 수 있음
profile
백엔드를 공부하고 있습니다.

0개의 댓글