[TIL] 2022.01.06

Minsu Han·2022년 1월 6일
0

TODAY I LEARNED

목록 보기
9/46
post-thumbnail

오늘 한 일

  • JAVA 복습 (chap12. 멀티스레드 전반부)

배운 것

  • 작업 스레드 생성 및 사용(Runnable, Thread 구현)
public class Thread1 implements Runnable {
    @Override
    public void run() {
        // 실행할 코드
    }
}

public class Thread2 extends Thread {
    @Override
    public void run() {
        // 실행할 코드
    }
}

Thread thread = new Thread(new Runnable() {
	@Override
	public void run() {
	    // 실행할 코드
});
    
Thread thread = new Thread() {
	@Override
	public void run() {
	    // 실행할 코드
	}
};
  • 동기화(synchronized) 메소드/블록: 다른 스레드로부터 현재 사용중인 객체를 보호
public synchronized void method() {
    // 메소드 전체가 임계 영역
}

public void method() {
    synchronized(this) {    // 스레드에 의해 사용중인 객체 잠금
        // 임계 영역   
    }
}
  • 여러 개의 동기화 메소드/블록 중 하나를 어떤 스레드가 실행 중인 경우, 다른 스레드는 해당 객체의 어떠한 동기화 메소드/블록도 실행할 수 없고, 일반 메소드만 실행 가능
  • start() 메소드 호출 시 실행 대기 상태(RUNNABLE)가 되며, 이후 스케줄링에 의해 CPU를 점유하면 run() 메소드를 실행(RUNNING), 실행 도중 스케줄링에 의해 다시 실행 대기 상태가 되는 것을 반복.
  • 스레드 일시 정지: WAITING(다른 스레드가 통지할 때까지 기다림), TIMED_WAITING(주어진 시간 동안 기다림), BLOCKED(사용중인 객체 lock이 풀릴 때까지 기다림)
  • 스레드 상태 제어 (source)
  • 스레드 간 협업: 두 스레드를 교대로 번갈아가며 실행하는 경우 (ex. 생산자-소비자 스레드). 공유 객체에 동기화된 두 메소드 안에서 wait(), notify() or notifyAll()를 호출하여 자신을 일시정지 상태로 만들거나(wait) 일시정지 상태의 다른 스레드를 실행 대기 상태로 만든다(notify).
  • 스레드의 안전한 종료: boolean 타입의 플래그를 while문에서 활용하거나, 일시정지 상태의 스레드에게 interrupt() 메소드를 호출하여 interruptedException을 발생시켜 예외처리 코드에서 안전하게 자원을 정리하고 종료하도록 한다. 일시정지 상태에 있지 않더라도 종료시킬 스레드에서 interrupt()가 호출되었는지 Thread.interrupted() 메소드의 리턴값(boolean)을 확인하여 while문을 탈출하게 하는 방식으로 종료시킬 수 있다.

내일 할 일

  • JAVA 복습 (chap12. 멀티스레드 후반부)
profile
기록하기

0개의 댓글