멀티 스레드

김지윤·2023년 2월 14일
0

자바

목록 보기
9/11

스레드
코드의 실행 흐름

멀티 스레드
멀티 스레드에서 하나의 스레드는 나머지 스레드에 영향을 주기 때문에 예외 처리를 잘 해주어야 한다.
(ex. 서버 개발, 게임 개발에 많이 사용한다.)

  • 자바 프로그램 실행시 JVM이 메인 스레드를 만들어 메인 메소드를 실행한다.
  • 현재 실행 중인 스레드가 궁금하면 Thread 클래스를 이용하여 알아낼 수 있다.
  • Thread 클래스를 이용하여 스레드를 작업할 수 있다.

<멀티 태스킹을 위해 스레드 만들기>

  • 스레드 생성 (방법1)
    Thread thread = new Thread(Runnable target);
    // 생성할 때, Runnable을 구현한 객체를 작성해주면 그것이 생성된다.
    // Runnable 인터페이스에는 run() 추상 메소드 한개 정의되어 있다.
  • 생성된 스레드 대기 상태로
    thread.start();
  • 스레드 생성 (방법2)
public class ThreadA extends Thread {
	@Override
    public void run() { }
}
Thread thread = new ThreadA();

// Thread 클래스의 run 메소드를 재정의

  • 스레드 생성 (방법3)
    익명 자식 클래스를 만들어 Thread의 메소드 재정의

스레드 이름 변경 : thread.setName("...");



<스레드 상태>

  • 스레드 생성, start( )하면 우선 -> 대기 상태(RUNNABLE)가 된다. (CPU 스케줄링 때문에)
  • run과 대기를 반복한 후, 모든 코드가 실행되면 종료(TERMINATED)가 된다.
  • core 개수에 따라 실행 가능한 스레드 개수가 정해진다.
  • Thread.sleep(...) : 일시정지 하기도 한다.



-> main스레드가 먼저 돌아가고 있으므로, sumThread를 시작시키기 위해서는 join()을 이용해서 끼워넣기를 해야한다.
(중간에 sumThread가 실행되고, 그 이후 main스레드가 실행된다.)


무의미한 실행이 계속될 때, 다른 스레드에게 양보

-> Thread.yield(); 사용

profile
꾸준하게 공부하고 기록하는 개발자

0개의 댓글