본문 바로가기

분류 전체보기

(684)
멀티 스레드(9) - 스레드 풀 1 : 스레드 풀의 정의 스레드를 활용한 병렬 작업이 증가하게 되면, 어플리케이션 성능이 저하될 수 밖에 없습니다. 스레드 생성과 스케줄링으로 인해서 CPU 사용량이 늘어나고, 메모리의 사용량이 늘어나기 때문입니다. 그래서 스레드 사용의 폭증을 막기 위해서 스레드 풀(Thread Pool)을 사용하게 됩니다.  스레드 풀은,  - 작업 처리에 사용되는 스레드 최대 개수를 제한해 놓고 - 작업 큐(Queue)에 들어온 작업들을, 각각의 스레드가 하나씩 맡아서 처리합니다. - 할당 작업 처리가 끝난 스레드는, 다시 작업 큐에서 새로운 작업을 가져와 처리합니다. 이런 구조이기 때문에, 만약에 작업 요청이 갑작스럽게 폭증한다고 해도, 스레드의 개수는 정해져있기 때문에 스레드 증가로 인한 어플리케이션 성능 저하가 발생하지 않는 것입니다...
멀티 스레드(8) - 스레드 그룹 5 앞선 아티클에서 ThreadGroup 메서드를 살펴보았습니다. 이제 이 내용을 기반으로 예제를 작성해 보겠습니다.    멀티 스레드(8) - 스레드 그룹 4앞선 아티클에서 우리는 스레드 그룹 생성 기능을 살펴보았습니다.    멀티 스레드(8) - 스레드 그룹 3스레드 그룹을 명시적으로 선언하는 방법도 있습니다. ThreadGroup 생성자를 이용해서 객체nozeroslope.tistory.com  아래 예제에서 스레드 그룹을 생성하고, 정보를 출력한 다음 3초 후 스레드 그룹의 interrupt( ) 메서드를 호출하여 스레드 그룹에 포함된 모든 스레드를 일괄 종료시킵니다. 여기서는 Thread 클래스의 생성자도 중요하게 사용되니 다시 확인합니다.   멀티 스레드(8) - 스레드 그룹 3스레드 그룹을 명시..
멀티 스레드(8) - 스레드 그룹 4 앞선 아티클에서 우리는 스레드 그룹 생성 기능을 살펴보았습니다.    멀티 스레드(8) - 스레드 그룹 3스레드 그룹을 명시적으로 선언하는 방법도 있습니다. ThreadGroup 생성자를 이용해서 객체를 생성하는 방식입니다. 이 때 생성자에서 ThreadGroup의 이름만 파라미터로 줄 수 있고, 부모 ThreadGroup과nozeroslope.tistory.com  당연한 의문인데, 이러한 스레드 그룹을 사용했을 때의 장점은 무엇이 있을까요? '그룹'으로 묶여있으니, 당연한 이야기지만 그룹을 일괄적으로 컨트롤이 가능하다는 장점이 있겠죠.  대표적인 예시가 interrupt( )입니다. ThreadGroup에서 제공하는 interrupt( ) 메서드를 사용하면, 그룹 내에 포함된 모든 스레드들을 일괄적으..
멀티 스레드(8) - 스레드 그룹 3 스레드 그룹을 명시적으로 선언하는 방법도 있습니다. ThreadGroup 생성자를 이용해서 객체를 생성하는 방식입니다. 이 때 생성자에서 ThreadGroup의 이름만 파라미터로 줄 수 있고, 부모 ThreadGroup과 이름까지 함께 파라미터로 전달이 가능합니다.  ThreadGroup tg = new ThreadGroup(String name);ThreadGroup tg = new ThreadGroup(ThreadGroup parent, String name); 두 번째 생성자처럼 스레드 그룹 생성 시에 부모(parent) 스레드 그룹을 별도로 지정하지 않을 경우, 현재 스레드가 속한 그룹의 하위 그룹으로 생성됩니다. 만일 main 스레드가 ThreadGroup(String name)을 이용해서 새로..
멀티 스레드(8) - 스레드 그룹 2 앞서 살펴본 스레드 그룹 사용 예제를 살펴보도록 하겠습니다.  // 1초 주기로 save() 메서드를 호출하는 데몬 스레드public class AutoSaveThread extends Thread { public void save() { System.out.println("작업 내용 저장"); } @Override public void run() { while(true) { try { Thread.sleep(1000); } catch (InterruptedException e) { break; } save(); } }}  import java.awt.Toolkit;import java.util.Map;import java.util.Set;public class Examp..
멀티 스레드(8) - 스레드 그룹 1 스레드 그룹(ThreadGroup)은 관련된 스레드를 일괄적으로 묶어서 관리할 목적으로 사용됩니다. 기본적으로 JVM이 실행되면 system 스레드 그룹을 만들게되고, JVM 운영에 필요한 스레드들을 system 스레드 그룹에 포함하게 됩니다.  그리고 system의 하위 스레드 그룹으로서 main 스레드 그룹이 생성됩니다. 그리고 '메인 스레드'를 이 main 스레드 그룹에 포함하게 됩니다.  기본적으로 스레드는 반드시 하나의 스레드 그룹에 포함되어야 합니다. 그런데 명시적으로 특정 스레드 그룹에 할당하지 않으면, 기본적으로는 자신을 생성한 스레드와 같은 스레드 그룹에 속하게 됩니다. 우리가 지금까지 생성한 작업 스레드는 대부분 main 스레드가 생성합니다. 그래서 결국 이들은 기본적으로 main 스레..
멀티 스레드(7) - 데몬 스레드 2 앞서 살펴본 데몬 스레드를 확인해볼 수 있는 예제를 살펴보도록 하겠습니다. 아래의 예제는 1초 주기로 save( ) 메서드가 자동 호출되도록 AutoSaveThread를 작성하고, 메인 스레드가 3초 후 종료되면 AutoSaveThread도 같이 종료될 수 있도록 AutoSaveThread를 데몬 스레드로 만들었습니다.  // 1초 주기로 save() 메서드를 호출하는 데몬 스레드public class AutoSaveThread extends Thread { public void save() { System.out.println("작업 내용 저장"); } @Override public void run() { while(true) { try { Thread.sleep(1000); } ca..
멀티 스레드(7) - 데몬 스레드 1 데몬(daemon) 스레드는, 주 스레드의 작업을 돕는 보저 역할을 수행하는 스레드입니다. 사실 이 데몬 스레드 자체의 속성은 일반 스레드와 아주 크게 다르지는 않은데, 주 스레드가 종료되면 강제로 종료된다는 특성을 갖습니다. 말했듯이 주 스레드의 보조 역할을 하는 것이 근본적인 존재 이유이기 때문에, 주 스레드가 종료되면 남아있을 이유가 없는 것이죠. 데몬 스레드가 동작하는 실제 예시를 보면, 워드프로세서의 자도 ㅇ저장 / 미디어 플레이어의 동영상(음악) 재생 / 가비지 컬렉터 등이 있습니다. 이들은 주 스레드(워드, 미디어 플레이어, JVM)가 종료되면 같이 종료됩니다.       스레드를 데몬으로 만들기 위해서는, 주 스레드가 데몬이 될 스레드의 setDaemon(true)를 호출해야 합니다. 아래..