목록스레드 (3)
삶 가운데 남긴 기록 AACII.TISTORY.COM

Thread dump는 언제 해야 하는 가? 1. Java 어플리케이션이 Hang 상태가 될 때 Hang 상태는 Java 어플리케이션의 Thread들이 멈춰있는 상황입니다. Shared Resource의 접근할 경우 다른 Thread가 사용할 수 없도록 Lock을 획득하며, 또한 이러한 Lock을 다른 Thread들이 이미 획득하고 있을 경우, Lock을 획득하기 위해 대기하게 됩니다. Java에서의 Lock은 내부 Monitor를 통해 관리되기 때문에 Monitor 획득이 Lock 획득을 의미합니다. 이렇게 Lock을 획득하기 위해 대기하는 Thread들이 많아지고, 대기 시간이 길어지면 Hang 인것처럼 보여지게 됩니다. Java 프로그램에서 Lock을 획득하기 위해서는 Synchronized구문을 ..
스레드 풀 스레드 풀은 작업 스레드를 제한된 개수(총 개수)만큼 정해놓고 작업 큐에 들어오는 작업들을 하나씩 스레드가 맡아서 처리합니다. 작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리 합니다. 스레드 풀(작업 큐)로 병렬 처리를 한다면 갑자기 스레드가 폭증하는 상황에서도 성능 저하를 최소화 할 수 있습니다. 스레드 풀은 java.util.concurrent 패키지의 ExecutorService 인터페이스와 Executors 클래스를 제공하고 있습니다. 스레드 풀 생성 Executors 클래스의 newCachedThreadPool()이나 newFixedThreadPool(int n Threads) 으로 생성 할 수 있습니다. 스레드 풀 종료 스레드 풀은 데몬 스레드가 아니기 때문에..
자바 어플리케이션은 main()스레드 외에 병렬로 처리하는 스레드를 같이 실행할 수 있습니다. 보통은 멀티 스레드로 병렬로 작업하는 것이 효율적이지만, 너무 많은 스레드를 실행하면 각 스레드간 context switching 에 시간을 더 소비하게 되어 오히려 효율이 떨어지게 됩니다. java.lang.Thread 클래스로부터 extends 하거나 Runnable 인터페이스로부터 implements 해서 스레드를 생성할 수 있습니다. Runnable 구현 방법 import java.awt.Toolkit; public class BeepTask implements Runnable { @Override public void run() { Toolkit toolkit = Toolkit.getDefaultToo..