[ Java.Thread-4. Thread Pool-2 (예제) ]


1. JDK안의 쓰레드 풀들

   - JDK 1.5버전 이전까지는 유저들이 직접 쓰레드 풀을 만들어 사용했다. 유저가 직접만드는 방식은 귀찮기도 했고, 쓰레드간의 Context Switching시에 성능문제도 발생했다.  JDK1.5에서는 java.util.concurrent패키지가 포함되었는데 여기에는 다양한 방식의 쓰레드 풀이 기본으로 포함되게 되었다.


2. Executors.newFixedThreadPool(10)

   - 정의 : 최대 쓰레드를 10개까지 만드는 풀.  

             동시에 일어나는 업무의 량이 비교적 일정할때 사용한다.

   - 소스 : newFixedThreadPool(2) 를 이용해서 2개의 Pool을 생성한 후 execute()를 사용해 

            연속적으로 5개의 ThreadTask Instance생성을 시도 한다. 

            각 ThreadTask는 1초씩(Thread.sleep(1000)) 수행시간이 걸린다.

            Pool이 2개 이므로 5개를 요청했지만 instance는 2개씩만 생성 된 후 instance가 종료되면

            다음 instance가 생성 된다.


   - NewFixedThreadPoolMain.java

      

   - ThreadTask.java
      

   - 수행결과
      




Posted by 농부지기
,

[ Java.Thread-3. Thread Pool-3 (기본개념) ]


1. 정의

   - 자바의 쓰레드는 CPU를 최대한 사용해서 많은 업무를 동시에 처리할수 있도록 도와준다. 그런데 이 쓰레드의 생성에는 약간의 시간과 메모리가 필요하다. JVM은 쓰레드의 생성 개수를 제약하지 않기 때문에 계속적으로 쓰레드를 생성하게 된다면 결과적으로 성능저하와 메모리 고갈의 문제가 생길수 있다. 

 

   - 이렇게 무제한 적인 쓰레드의 생성을 막기 위해서,  쓰레드풀(Thread Pool)이라는 쓰레드 관리 방식이  사용되고 있다. 쓰레드 풀이란 쓰레드를, 허용된 갯수 안에서만 사용할수 있도록 스스로 제약하는 방식이다.  이것은 JVM의 옵션등으로 제어할 수는 없고, 어플리케이션이 선택적으로 사용하는 방법이다.


   - 쓰레드풀 방식을 사용하는 대표적인 소프트웨어는 Tomcat같은 웹서버들이다. 웹서버들은 동시에 많기는 수천~수만의 요청이 들어올수 있는데, 이때마다 쓰레드를 생성하는 것은 JVM의 메모리를 급속하게 소비시키며 성능에도 저하가 발생하게 된다. 이럴때 최대 쓰레드 갯수를 지정해 놓으면 쓰레드 갯수 이상의 HTTP 요청에 대해서는 처리하지 않고  기다렸다가 놀고 있는 쓰레드가 생기면 그때 HTTP 요청을 쓰레드를 통해 처리한다. 



2. 쓰레드 풀의 구조

   쓰레드 풀은 크게 3가지 부분으로 나눈다. 


   1) Task의 요청을 받는 Queue부분

   2) 실제 쓰레드를 생성하고 관리하는 하는 manager 부분

   3) Queue 안에서 Task를 꺼내와서 실제 쓰레드 위에서 동작시켜 결과를 얻는 부분


   [ 풀 구조 - 이미지]



Posted by 농부지기
,

[ Java.Thread-3. Thread예제-3 (쓰레드 이름) ]



1. 소스 목록 : ThreadMain.java


2. ThreadMain.java

   - 쓰레드 이름을 얻고

     쓰레드 이름을 설정하고

     쓰레드 이름을 출력한다.


4. 수행결과

   - 매번 수행 시 결과는 계속 달라진다.


5. ThreadMain .java


6. 수행결과 (매번 수행시 결과 순서는 다르다.)
 



Posted by 농부지기
,