자바 쓰레드 인터럽트 블로킹 해결 (Java Thread Interrupt Blocking) 자바 - 인터럽트에 응답하지 않는 블로킹 작업 다루기자바Java 라이브러리에 포함된 여러 블로킹 메소드는 대부분 Thread 인터럽트가 발생하는 즉시 멈추면서 InterruptedException을 띄우게 되어 있다. 따라서 작업 중단 요청에 적절하게 대응하는 작업을 쉽게 구현할 수 있다. 그런데 잘 살펴보면 모든 Java 블로킹 메소드가 인터럽트에 대응하게 되어 있지는 않다. 예를 들어 동기적인 소켓 I/O를 실행하는 도중에 스레드가 멈춰 있는 경우라던가 암묵적인intrinsic 락을 확보하기 위해 대기하는 등의 작업에 멈춰있는 경우라면, Interrupt를 거는 것이 인터럽트 상태 변수의 값을 설정하는 것 말..
자바 쓰레드 안전성을 위한 동기화, 캡슐화 (thread safety 방법) 스레드(Thread, 쓰레드) 안전성을 정의하기는 굉장히 까다롭다. 더 정형화할 수는 있겠지만 복잡해서 실용적 참고나 직관적 이해 어디에도 도움이 안 된다. 남는 것은 계속해서 빙빙 도는 대략적인 설명뿐이다. 구글로 검색하면 다음과 같은 수많은 쓰레드 안전성 '정의'가 나온다. - 여러 프로그램 스레드에서 스레드 간에 원치 않는 상호 작용 없이 호출할 수 있는...- 호출하는 측에서 다른 작업을 하지 않고도 여러 쓰레드에서 동시에 호출할 수 있는... 이런 정의를 놓고 보면 쓰레드 안전성 개념이 헛갈리는 것도 무리가 아니다. thread safety가 대체 뭔가? 마치 "여러 스레드에서 안전하게 사용될 수 있으면 해당 클래스는 ..
자바 스레드 Thread 문제점 3가지, 사이클, 자원 낭비, 안전성 문제 작업마다 자바 스레드를 생성하는 정책은 상용 서비스에서 사용하기에는 무리가 있다. 왜냐하면, 특정 상황에서 엄청나게 많은 대량의 자바 스레드가 생성될 수도 있는데, 이럴 때는 아래와 같은 단점이 발생한다. Java Thread 라이브 사이클 문제 자바 스레드를 생성하고 제거하는 작업에도 자원이 소모된다. Java Thread를 생성하고 제거하는 데 실제로 얼마만큼의 자원을 소모하는지는 운영체제에 따라 다르지만, 어쨌거나 자바 스레드를 생성하는 과정에는 일정량의 시간이 필요하다. 따라서 클라이언트의 요청을 처리할 때 기본적인 딜레이가 생기고, 그동안 JVM과 운영체제는 몇 가지 기초적인 작업을 진행한다. 만약 클라이언트의 요청 내용..