본문 바로가기
[Java Concurrency] 동기화 클래스 구현 14.1. 상태 종속성 관리 - 병렬 객체의 상태 종속적인 메소드는 선행 조건이 만족하지 않았을 때 오류가 발생하는 문제에서 비켜날 수도 있겠지만, 비켜나는 일보다는 선행 조건을 만족할 때까지 대기하는 경우가 많아진다. - 자바에 내장된 조컨 큐 메커니즘(condition queue mechanism)은 실행 중인 스레드가 특정 객체가 원하는 상태에 진입할 때까지 대기할 수 있도록 도와주며, 원하는 상태에 도달해서 스레드가 계속해서 실행할 수 있게 되면 대기 상태에 들어가 있던 스레드를 깨워주는 역할도 담당한다. - 일단 선행 조건을 만족하지 않았다면 락을 다시 풀어줘야 다른 스레드에서 상태 변수를 변경할 수 있다. 만약 락을 풀어주지 않고 계속 잡고 있다면 다른 스레드에서 상태 변수의 값을 변경할 수 .. 2017. 5. 8.
[Java Concurrency] GUI 앱 [Java Concurrency] GUI 앱 9.1. GUI 는 왜 단일 스레드로 동작하는가?- 대부분의 GUI 프레임웍이 단일 스레드로 동작하도록 돼 있다. GUI 프레임웍에서 여러 개의 스레드를 사용하고자 하는 시도는 많았지만, 대부분 경쟁 조건(race condition)과 데드락(deadlock) 등의 문제가 계속해서 발생했다. 대부분의 프레임웍이 이벤트 처리용 전담 스레드를 만들고, 전담 스레드는 큐에 쌓여 있는 이벤트를 가져와 앱에 준비돼 있는 이벤트 처리 메소드를 호출해 기능을 동작시키는 단일 스레드 이벤트 큐 모델에 정착한 셈이다. - 단일 스레드 GUi 프레임웍은 스레드 제한 기법으로 스레드 안전성을 보장한다. * 9.1.1. 순차적 이벤트 처리 - 작업을 순차적으로 처리하는 방법의 단점.. 2017. 4. 28.
[Java Concurrency] 중단 및 종료 #2 [Java Concurrency] 중단 및 종료 #2 7.3. 비정상적인 스레드 종료 상황 처리 - 스레드를 예상치 못하게 종료시키는 가장 큰 원인은 바로 RuntimeException 이다. RuntimeException 은 대부분 프로그램이 잘못 짜여져서 발생하거나 기타 회복 불가능의 문제점을 나타내는 경우가 많기 때문에 try_catch 구문으로 잡지 못하는 경우가 많다. RuntimeException 은 호출 스택을 따라 상위로 전달되기보다는 현재 실행되는 시점에서 콘솔에 스택 호출 추적 내용을 출력하고 해당 스레드를 종료시키도록 되어 있다. - 스레드 풀에서 사용하는 작업용 스레드나 스윙의 이벤트 처리 스레드와 같은 작업 처리용 스레드는 항상 Runnable 등의 인터페이스를 통해 남이 정의하고.. 2017. 4. 26.
[Java Concurrency] 구성 단위 #2 [Java Concurrency] 구성 단위 #2 5.4. 블로킹 메소드, 인터럽터블 메소드 - 스레드는 여러 가지 원인에 의해 블록 당하거나, 멈춰질 수 있다. 스레드가 블록되면 동작이 멈춰진 다음 블록된 상태(BLOCKED, WAITING, TIMED_WAITING) 가운데 하나를 갖게 된다. 블로킹 연산은 단순히 실행 시간이 오래 걸리는 일반 연산과는 달리 멈춘 상태에서 특정한 신호를 받아야 계속해서 실행할 수 있는 연산을 말한다. ( I/O 작업 끝나기를 기다리거나, 기다리던 락을 확보하거나, 다른 스레드의 작업 결과를 받아오는 등의 신호 ) - Thread 클래스는 해당 스레드를 중단시킬 수 있도록 interrupt 메소드를 제공하며, 해당 스레드에 인터럽트가 걸려 중단된 상태인지를 확인할 수 .. 2017. 4. 21.
반응형