본문 바로가기

프로그래밍(TA, AA)/JVM 언어

(117)
[자바] Worker Thread 패턴 worker라는 것은 "일을 하는 사람", "작업자"라는 의미입니다. Worker Thread 패턴에서는 워커 스레드(Worker Thread: 작업자 쓰레드)가 일을 하나씩 가지러 가서 처리를 합니다. 일이 없으면 워커 쓰레드는 새로운 일이 도착할 때까지 기다립니다. Worker Thread를 Background Thread라고 부르는 일도 있습니다. 또한 워커 쓰레드를 여러 개 보유하고 있는 장소에 주목하여 Thread Pool 이라고 부르기도 합니다. ClientThread 클래스의 쓰레드가 Channel 클래스에 일의 request(의뢰)합니다. Channel 클래스의 인스턴스는 워커 쓰레드(WorkerThread) 다섯 명을 맡고 있습니다. 워커 쓰레드는 모두 일의 리퀘스트가 오기를 기다리고 있..
[자바] Guarded-Suspension 패턴 Guarded Suspension 패턴은 쓰레드를 기다리게 하여 인스턴스의 안전성을 지킵니다. 이는 마치 우편 배달원을 현관에서 기다리게 하고 자기의 프라이버시를 지키는 것과 비슷합니다. Guarded Suspension 패턴에는 guarded wait, spin lock 등 여러 가지 명칭이 있습니다. 하나의 쓰레드(ClientThread)가 다른 쓰레드(ServerThread)에 Request 인스턴스를 건네주는 것입니다. 이것은 매우 간단한 쓰레드 간의 통신입니다. 이름 해설 Request 하나의 리퀘스트를 표현한 클래스 RequestQueue 리퀘스트를 순서대로 비축해두는 클래스 ClientThread 리퀘스트를 내주는 클래스 ServerThread 리퀘스트를 받아 해석하는 클래스 Main 동작 ..
[자바] 스트림과 병렬 데이터 처리 스트림 거의 모든 자바 애플리케이션은 컬렉션을 만들고 활용합니다. 하지만 컬렉션으로 모든 문제가 해결되는 것은 아닙니다. 예를 들어 리스트에서 고가의 트랜잭션(Transaction)만 필터링한 다음에 통화로 결과를 그룹화해야 한다고 가정해보겠습니다. 다음 코드처럼 많은 기본 코드를 구현해야 합니다. // 그룹화된 트랜잭션을 더할 Map 생성 Map transactionsByCurrencies = new HashMap(); // 트랜잭션의 리스트를 반복 for (Transaction transcation : transactions) { // 고가의 트랜잭션을 필터링 if (transaction.getPrice() > 1000) { // 트랜잭션의 통화 추출 Currency currency = transac..
[자바] 람다 표준 API의 함수 인터페이스 출처: http://palpit.tistory.com/673 자바에서 제공되는 표준 API에서 한 개의 추상 메소드를 가지는 인터페이스들은 모두 람다식을 이용해서 익명 구현 객체로 표현이 가능합니다. 예를 들어 스레드의 작업을 정의하는 Runnable 인터페이스는 매개변수와 리턴값이 없는 run() 메소드만 존재하기 때문에 다음과 같이 람다식을 이용해서 Runnable 인스턴스를 생성시킬 수 있습니다. package lambda; public class RunnableExam { public static void main(String[] args) { Runnable runnable = () -> { for (int i = 0; i < 10; i++) { System.out.println(i); } };..
[자바] 스레드 고급 동기화 (1) 보호되어 있는 글입니다.