course 2021/JAVA

day23 - thread

코딩하는토끼 2021. 9. 30. 21:48

> 스레드 thread

멀티스레드 - 두 가지 작업을 동시에 처리하는 것

한 프로그램 안에서 멀티태스킹을 동시에 하는 애플리케이션도 있음 (ex. 메신저)

스레드 - 프로그램의 실행흐름 (프로그램 내 스레드가 2개 → 두 개의 코드 흐름이 생긴다는 뜻)

< How to use? >

방법1

Runnable 인터페이스를 상속받아 추상메소드 run() 을 오버라이딩

→ Thread 객체의 생성자의 매개값으로 전달

→ start() 메소드를 통해 실행시킴

방법2

Thread 클래스를 상속받아 추상메소드 run() 을 오버라이딩

→ Thread 객체의 생성자의 매개값으로 전달

→ start() 메소드를 통해 실행시킴

차이점

방법1 - Runnable 은 인터페이스, 스레드 실행의 기능만 정의되어있음 → 클래스 내부에서 사용가능한 메소드 한정적

(단, 스레드의 static 메소드는 전부 사용 가능)

방법2 - Thread 클래스의 기능을 전부 받아서 사용할 수 있음

- 스레드 기본 메소드 -

1) start(): 스레드 클래스를 진행

2) (static) currentThread(): 현재 스레드를 반환

3) getName(): 스레드 이름 반환

4) (static) sleep(): 스레드를 잠시 멈춤

5) yield(): 스레드 실행을 다른 스레드에게 양보

6) join(): 해당 스레드를 우선 실행

 

* 스레드가 사용중인 객체를 다른 스레드가 변경할 수 없도록 하기 → 메소드의 선언에 synchronized 작성

ex. public synchronized void run(){ }

- synchronized 가 선언되면 해당 객체가 사용될 때 다른 곳에서 호출할 수 없음