Thread(스레드) - Thread, Runnable

개비의 끄적끄적·2023년 3월 30일
0

💡 Thread(스레드)

  • 세부 실행 단위
  • 자바 실행의 기본 단위(main 스레드 : 메인만 실행되는 스레드)
  • main 스레드 이외에 스레드 추가 가능(메인만 실행되는 게 아니라 다른 것도 실행 가능하게 할 수 있다!)

🔎 스레드 생성

  1. Thread 클래스를 상속받는 방법
    • extends Thread
    • Thread 클래스의 public void run() 메소드를 @override해서 내부에 수행할 작업 작성
  2. Runnable 인터페이스를 구현하는 방법
    • implements Runnable
    • Runnable 인터페이스를 구현한 클래스는 Thread로 바꿔야 start() 메소드를 호출할 수있다.
    • Thread 생성자에 러너블 타겟이 들어가 있는 매개변수를 호출!

🔎 스레드 실행

  1. start() 메소드 호출
  2. start() 메소드를 호출하면 run() 메소드에 오버라이드 한 내용이 실행
  • 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을 매개변수로.

📰 콘솔창 결과

-> 위에서 말했듯 동작 순서는 바뀔 수 있기 때문에 실행할 때마다 순서가 달라진다


스레드 어렵당.... 다음에 공부 더해보자..
profile
앗녕하세요! 블비의 개적발적🐾

0개의 댓글