본문 바로가기
🚀 부트캠프 - PLAYDATA

Thread

by minhe2810 2023. 7. 1.

Thread 

: 소프트웨어적 병렬처리 방식 / 여러가지의 일을 동시에 처리하게 됨. 

 

Thread 를 사용하는 방법은 2가지 

 

1. Thread 클래스 상속

- 사용자 클래스 정의할 때 

  : run() 메서드 오버라이드 (@Override) 후 Thread 가 실행할 내용 코딩  : 쓰레드 클래스를 상속 받은 클래스에서는 run()메서드를 오버라이드 해야하는 이유 > 쓰레드 클래스는 Runnable인터페이스를 구현하고 있으며, run()메서드는 Runnable 인터페이스에서 정의된 추상메서드임 . 따라서 쓰레드 클래스를 상속받은 클래스에서는 run() 메서드를 구현해야만 쓰레드가 실행될 때 실제로 수행할 작업을 정의할 수 있음. 

❗️만약 쓰레드클래스를 상속 받은 상태에서 run메서드를 오버라이드 하지 않으면 쓰레드 클래스에서 상속받은 run메서드가 실행됨. 

 

 

  : start() 메서드 호출하여 Thread 시작

 

2. Runnable 인터페이스 구현 

  : run()메서드 구현 

  : 해당 클래스 인스턴스 생성 

  : Thread 클래스 생성자에게 전달 > Thread 생성, 시작 

 

 

1. FakeThread (Thread 상속받지도, Runnable 구현하지도 않음)

FakeThread를 생성하여 ThreadTest에서 객체 생성한 뒤에 start()메서드를 실행 시켜봄. 

 

++ 맨 마지막 줄 주석 "//메인 종료 되어도 쓰레드는 일 하고"  무시,,,해,,, 

 

물론 run(), start() 메서드는 작성을 해줌.

 

그 결과 

(생략)

다음과 같이 순차적으로 f1, f2가 실행되는 것을 확인할 수 있었음. 

 

2. Runnable 인터페이스를 구현해 실행하는 방법  + sleep() 사용방법 

: implements Runnable

 

 

* sleep() 메서드 사용 

- Runnable 인터페이스를 구현받은 RunnableTest 클래스 

- 먼저 멤버 변수를 선언을 해준다. 

int count : 

int num : 

boolean timeout :

마찬가지로 run() 메서드에 쓰레드가 진행해야할 일을 코딩한다. 

while문을 활용하여 timeout(false로 초기화함) 하지만 !을 붙여 즉 true값이 되어 다음 실행문을 실행할 수 있도록 코드를 짜준다. 

그리고는 sleep()메서드를 활용하여 3초동안 잠 재워준다. 하지만 여기서 아까와 같이 예외처리를 해줘야 한다. 그리고 num을 1씩 증가를 시키면서 while 문을 반복 시킨다. 

그리고 num이 count 보다 커질 경우 timeout을 true로 바꿔 반복문을 종료 시킨다. 

 

 

 

 

 

3. Thread 클래스 상속 받아 사용하는 방법 

: extends Thread 

하지만 sleep기능을 활용해보기 위해 이름을 sleepThread로 선정! 

 

.start() : thread 시작

.join() : 현재 진행 중인 thread가 다른 thread가 종료될 때 까지 기다리도록 만드는 메서드. 일반적으로 메인 thread에서 join() 메서드를 호출하면 , 메인 thread 는 호출된 thread의 작업이 완료될 때까지 대기하게 됨.  이를 사용하는 이유는 멀티쓰레드 환경에서 쓰레드들간의 작업 순서를 제어하기 위해서 사용함. 특정 쓰레드가 종료 되어야만 다음 작업을 수행해야할 경우 join()메서드를 호출하여 다른 쓰레드들이 기다리도록 할 수 있음.

.sleep() : thread가 일을 하지 않도록 잠시동안 잠재우는 메서드  

Thread 클래스를 상속 받은 SleepThread클래스에서 사진과 같이 sleep()메서드를 활용할 수 있다.  

sleep()의 시간은 1000 =>  1초이다. 나는 5000을 입력해서 쓰레드를 5초간 재우고자 한다. 

Thread.sleep()은 쓰레드를 강제적으로 일을 못하게 하는거기 때문에 예외처리를 해줘야 한다. 

그 결과 sleep 시작했다~~    --5초 후 --->   sleep 끝났다!! 가 출력되는 것을 확인할 수 있었다. 

'🚀 부트캠프 - PLAYDATA' 카테고리의 다른 글

[Spring] 스프링 AOP 기능  (0) 2023.08.13
[PLAYDATA / JSP] for문 사용해서 목록 리스트를 출력해서 전송  (0) 2023.07.18
인터페이스  (0) 2023.06.29
상속  (0) 2023.06.29
Day 1 / 클래스 구성  (0) 2023.06.29