본문 바로가기

thread3

다른 스레드의 종료를 기다렸다가 수행하는 방법, Thread.join() 주로 스레드는 다른 스레드와 독립적으로 실행하도록 한다. 그렇지만 특정 스레드가 종료될 때까지 기다렸다가 실행해야 하는 경우도 있을 수 있다. 예를 들어, A, B 두 개의 스레드가 있다. A 스레드는 B 스레드에서 실행한 결과값을 이용해야 한다고 가정하자. 이러한 경우에는 Thread 클래스의 join() 메서드를 사용하면 된다. ThreadA가 ThreadB의 join() 메서드를 호출하면, ThreadA는 ThreadB 작업이 종료할 때까지 일시 정지 상태가 된다. 작업이 종료되고 나면 ThreadA는 일시 정지 상태에서 실행 상태가 되서 다음 코드를 실행하게 된다. ThreadA는 ThreadB 작업을 실행한다. ThreadA는 ThreadB.join() 메서드를 호출한다. ThreadA는 일시 .. 2019. 4. 29.
Future를 이용한 블로킹 방식의 작업 완료 통보 방법 Future 블로킹 방식의 작업 완료 통보 ExecutorService의 submit() 메서드는 매개값으로 준 Runnable 또는 Callable 객체를 스레드풀의 작업 큐에 저장하고 즉시 Future 객체를 반환한다. Future 객체는 작업이 모두 완료될 때까지 기다렸다가 최종 결과값을 얻는데 사용한다. Future를 지연 완료(pending completion) 객체라고 한다. Future 클래스의 get() 메서드를 호출하면 스레드가 작업을 완료할 때까지 블로킹 상태로 머무르다가 작업이 완료되면 처리 결과를 반환한다. 이 방법이 블로킹을 사용하는 작업 완료 통보 방식이다. 아래는 Future 클래스의 get() 메서드 설명이다. get() : 작업이 완료될 때까지 지연했다가 처리 결과를 반환한.. 2019. 4. 29.
쓰레드(Thread) 종료 방법 stop 플래그, interrupt() 쓰레드(Thread)는 run() 메소드가 모두 실행되면 자동적으로 종료된다. 어떤 경우에는 모든 작업을 수행하기 전에 쓰레드 수행을 즉시 종료 시켜야하는 상황도 생길 수 있다. 예를 들어, 크롬에서 어떤 프로그램을 다운로드를 받는 도중에 사용자가 취소 버튼을 눌러서 다운로드 중인 작업을 취소할 수 있다. Thread에는 작업을 즉시 종료시키는 stop() 메서드를 제공했지만 이제는 deprecated이 되었다. deprecated가 되었다는 이유는 어느 문제로 인해서 해당 메서드를 사용하지 않는 것을 권고한다는 것을 의미한다. stop() 메서드는 쓰레드를 종료시킴에 따라 쓰레드가 사용중인 자원들을 불완전한 상태로 남겨 놓는다. 자원이란 것은 데이터베이스 연결 하는 커넥션 자원, 네트워크 연결을 사용하.. 2019. 4. 11.