JAVA

[JAVA] 스레드

(งᐛ)ว 2023. 9. 4. 22:52
728x90

프로세스 : 현재 실행되고 있는 프로그램 

스레드 : 프로그램 내부에 존재하면서 실행흐름을 나타내는 것 

 

각각의 프로세스는 서로 간섭할 수 없다. 

 

프로세스가 실행되는 방식

- 시간분할방식 : 모든 프로세스에게 동일한 시간을 할당하고 골고루 실행되는 방식

- 선점형방식 : 각각의 프로세스에게 우선 순위를 부여하고 우선순위가 높은순으로 실행되는 방식

 


 

스레드의 생성 

JVM이 스레드 처리시 하는일? 스레드 스케쥴링!

- 스레드가 몇 개 존재하는지 

- 스레드가 실행되는 프로그램코드 위치가 어딘지 

- 현재 스레드 상태는 무엇인지 

- 스레드의 우선순위는 몇인지 

개발자가 스레드 처리시 하는 일? 자바 스레드로 동작할 작업이 무엇인지 코드로 작성! 

 

 

스레드의 사용 

메인과 별개로 동시 실행한다. 

- Thread 클래스 상속 + run()메서드 오버라이딩 + start()메서드로 호출(실행)

- Runnable 인터페이스 구현 + run()메서드 오버라이딩 + start()메서드로 호출(실행)

 

 


 

스레드 이름부여

 

별도로 이름을 지정하지 않으면 자바에서 임의로 지정해준다.

위와같이 같은 시간에 서로다른 독립적인 스레드가 처리되는 것을 비동기작업이라고 함

 


스레드 동기화 

 

하나의 스레드가 메서드를 점유중일 때 다른 스레드가 동시에 접근하지 못하도록 제어할 수 있다. 

키워드는 synchronized

 

 

대신 이렇게 메서드에 붙이면 성능저하 발생할 수 있는 단점

이를 해결하기 위해 메서드 전체가 아닌 특정 영역만 동기화처리할 수 있는데 이를 '블록동기화'라고 함

 

 

메서드 동기화와 블록 동기화의 결과는 동일하지만 블록 동기화는 다중작업순서를 제어할 수 있다는 장점 


스레드 상태 

 

 

TIMED_WATING 예시

Thread.sleep()메서드는 try-catch와 함께 쓴다.

 

 

 

wait()과 notify() : 일시정지와 재개 

 

 

 

 

 

728x90
728x90