본문 바로가기

날리지

[Java] ThreadLocal 사용법 자바 1.2 버전부터 제공되고 있지만 아직 다수의 개발자들이 잘 몰라서 활용을 잘 못하는 기능이 하나 있는데, 그 기능이 바로 쓰레드 단위로 로컬 변수를 할당하는 기능이다. 이 기능은 ThreadLocal 클래스를 통해서 제공되는데, 본 글에서는 ThreadLocal 클래스의 기본적인 사용방법과 활용 방법을 살펴보도록 하겠다. ThreadLocal이란? 일반 변수의 수명은 특정 코드 블록(예, 메서드 범위, for 블록 범위 등) 범위 내에서만 유효하다. { int a = 10; ... // 블록 내에서 a 변수 사용 가능 } // 변수 a는 위 코드 블록이 끝나면 더 이상 유효하지 않다. (즉, 수명을 다한다.) 반면에 ThreadLocal을 이용하면 쓰레드 영역에 변수를 설정할 수 있기 때문에, 특정.. 더보기
[자바] (멀티쓰레딩 4) 쓰레드에서 값 반환 쓰레드에서 값 반환 하기쓰레드로부터 값을 리턴 받는 방법을 살펴보자.일반 쓰레드의 경우를 살펴본 후 Executor의 경우도 살펴보자.1. 일반 쓰레드의 경우일반 쓰레드에서 리턴 값을 얻는 방법은 아래 두 가지가 있다.블록킹: synchronized를 이용해 변경 시점까지 락을 거는 방법논블록킹: Observer Pattern을 이용하는 방법1.1 블록킹synchronized를 이용해 변경 시점까지 락을 거는 방법으로 데이터를 읽는 메소드를 락을 걸고 쓰레드가 실행되는 마지막에 락을 푼다. 그 예는 다음과 같다. this.wait()로 기다리고 this.notifyAll()로 해제한다. done 변수를 이용해 synchronized로 무조건 들어가지 않도록 했으며, done은 volatile로 선언해서 .. 더보기
[자바] (멀티쓰레딩 3) 쓰레드 이름 설정 Java 쓰레드 이름 설정디버깅의 편리를 위해 Java 쓰레드에 이름을 부여하는 것이 좋다. 그 방법을 알아보자.1. 실행 시 쓰레드 이름 부여하기run() 메소드안에서 Thread.currentThread().setName()을 이용해서 쓰레드 이름을 부여한다. 이 방식은 일반 thread는 물론이고 Executor에도 동일하게 적용되는 방식이다.import java.util.concurrent.TimeUnit; public class NamingThreadsFirstWay { public static void main(String argc[]) { System.out.println("Main thread starts here..."); Thread t = new Thread(new MyThreadTa.. 더보기
[자바] Java - (멀티쓰레딩 2) Executor 기본 1. 개요Java의 일반 쓰레드 구동 방식은 다양하지만, Executor는 단지 하나의 방식으로 간단하게 쓰레드를 구동할 수 있다. 아래의 두 가지를 하면 된다.태스크를 정의한 클래스의 생성Executor Service에 태스크 객체를 제공Executor 프레임웍은 다음과 같은 특징을 지닌다.쓰레드 풀을 사용무거운 쓰레드는 미리 할당 가능태스크와 쓰레드를 생성하고 관리하는 것을 분리쓰레드 풀안의 쓰레드는 한번해 하나씩 여러 태스크를 실행태스크 큐를 이용해 태스크를 관리Executor Service를 더이상 필요 없으면 중지Executor Service가 멈추면 모든 쓰레드도 중지2. 주요 클래스와 인터페이스Executor 인터페이스: 태스크와 쓰레드를 분리하고 실행을 담당void execute(Runna.. 더보기
[자바] 멀티쓰레드 환경에서 디버깅하기 -- 멀티쓰레드 환경에서 자바 디버깅하기 멀티 쓰레드 환경에서는 여러 개의 쓰레드를 제어 해야 하기 때문에, 디버깅이 어렵다. 이클립스에서는 이를 위한 디버깅 툴을 제공한다. 정상으로 메인 쓰레드를 실행시켜 멀티 쓰레드 디버깅 환경에 들어 간 뒤, 한 쓰레드가 wait상태에 들어가면, 해당 쓰레드를 suspend 시키고 다음 쓰레드를 이용 하여 디버깅을 수행하면 된다. 위에서 쓰레드가 Wait상태에 들어가면, Resume옆의 Suspend버튼이 활성화 된다. 활성화된 Suspend 버튼을 클릭하고 다시 새로운 쓰레드로 Resume하면, 다음 쓰레드의 디버깅을 수행할 수 있다. 더보기
루씬 검색엔진 1. How Search Application works? Any search application does the few or all of the following operations.StepTitleDescription1Acquire Raw ContentFirst step of any search application is to collect the target contents on which search are to be conducted.2Build the documentNext step is to build the document(s) from the raw contents which search application can understands and interpret easily.3Analy.. 더보기