[JAVA] 스레드
프로세스 : 현재 실행되고 있는 프로그램
스레드 : 프로그램 내부에 존재하면서 실행흐름을 나타내는 것
각각의 프로세스는 서로 간섭할 수 없다.
프로세스가 실행되는 방식
- 시간분할방식 : 모든 프로세스에게 동일한 시간을 할당하고 골고루 실행되는 방식
- 선점형방식 : 각각의 프로세스에게 우선 순위를 부여하고 우선순위가 높은순으로 실행되는 방식
스레드의 생성
JVM이 스레드 처리시 하는일? 스레드 스케쥴링!
- 스레드가 몇 개 존재하는지
- 스레드가 실행되는 프로그램코드 위치가 어딘지
- 현재 스레드 상태는 무엇인지
- 스레드의 우선순위는 몇인지
개발자가 스레드 처리시 하는 일? 자바 스레드로 동작할 작업이 무엇인지 코드로 작성!
스레드의 사용
메인과 별개로 동시 실행한다.
- Thread 클래스 상속 + run()메서드 오버라이딩 + start()메서드로 호출(실행)
- Runnable 인터페이스 구현 + run()메서드 오버라이딩 + start()메서드로 호출(실행)
스레드 이름부여
별도로 이름을 지정하지 않으면 자바에서 임의로 지정해준다.
위와같이 같은 시간에 서로다른 독립적인 스레드가 처리되는 것을 비동기작업이라고 함
스레드 동기화
하나의 스레드가 메서드를 점유중일 때 다른 스레드가 동시에 접근하지 못하도록 제어할 수 있다.
키워드는 synchronized.
대신 이렇게 메서드에 붙이면 성능저하 발생할 수 있는 단점
이를 해결하기 위해 메서드 전체가 아닌 특정 영역만 동기화처리할 수 있는데 이를 '블록동기화'라고 함
메서드 동기화와 블록 동기화의 결과는 동일하지만 블록 동기화는 다중작업순서를 제어할 수 있다는 장점
스레드 상태
TIMED_WATING 예시
Thread.sleep()메서드는 try-catch와 함께 쓴다.
wait()과 notify() : 일시정지와 재개