분류 전체보기 (661) 썸네일형 리스트형 멀티 스레드(9) - 스레드 풀 2 : 스레드 풀 생성 및 종료 1 ○ 스레드풀 생성 앞선 스레드풀 개념에서 설명했듯이, ExecutorService 인터페이스의 구현 객체는 Executors 클래스의 static 메서드를 이용해 생성하게 됩니다. 아래 두 가지 메서드 중 하나를 사용하게 됩니다. 메서드명(파라미터)초기 스레드 수코어 스레드 수최대 스레드 수newCachedThreadPool( )00Integer.MAX_VALUEnewFixedThreadPool(int nThreads)0nThreadsnThreads * 초기 스레드 수 : ExecutorService 객체가 생성될 때 기본적으로 생성되는 스레드 수를 의미 * 코어 스레드 수 : 스레드 수 증가 후, 사용하지 않는 스레드를 스레드 풀에서 제거할 때 최소한으로 유지해야 할 스레드 수 * 최대 스레드 수 .. 멀티 스레드(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.. 이전 1 2 3 4 5 ··· 83 다음