자바 가 스 레 드 탱크 를 만 드 는 두 가지 다른 방법의 비교
java.util.concurrent.Executors 류 의 API 는 연결 풀 을 대량으로 만 드 는 정적 방법 을 제공 합 니 다.
1.고정 크기 의 스 레 드 탱크:
package BackStage;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
public class JavaThreadPool {
public static void main(String[] args) {
//
ExecutorService pool = Executors.newFixedThreadPool(2);
// Runnable ,Thread Runnable
Thread t1 = new MyThread();
Thread t2 = new MyThread();
Thread t3 = new MyThread();
Thread t4 = new MyThread();
Thread t5 = new MyThread();
//
pool.execute(t1);
pool.execute(t2);
pool.execute(t3);
pool.execute(t4);
pool.execute(t5);
//
pool.shutdown();
}
}
class MyThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 。。。");
}
}
나중에 Executor Service 의 기능 이 생각 보다 좋 지 않 고 스 레 드 용기 만 제공 하 는 것 을 발 견 했 습 니 다.그래서 나중에 저 는 자바.lang.ThreadGroup 을 사 용 했 습 니 다.ThreadGroup 은 많은 장점 을 가지 고 있 습 니 다.가장 중요 한 것 은 스 레 드 를 옮 겨 다 닐 수 있다 는 것 입 니 다.그 스 레 드 가 이미 실행 되 었 고 그 스 레 드 가 실행 되 고 있다 는 것 을 알 게 되 었 습 니 다.ThreadGroup 의 사용 코드 는 다음 과 같 습 니 다.
class MyThread extends Thread { boolean stopped; MyThread(ThreadGroup tg, String name) { super(tg, name); stopped = false; } public void run() { System.out.println(Thread.currentThread().getName() + " starting."); try { for (int i = 1; i < 1000; i++) { System.out.print("."); Thread.sleep(250); synchronized (this) { if (stopped) break; } } } catch (Exception exc) { System.out.println(Thread.currentThread().getName() + " interrupted."); } System.out.println(Thread.currentThread().getName() + " exiting."); } synchronized void myStop() { stopped = true; } } public class Main { public static void main(String args[]) throws Exception { ThreadGroup tg = new ThreadGroup("My Group"); MyThread thrd = new MyThread(tg, "MyThread #1"); MyThread thrd2 = new MyThread(tg, "MyThread #2"); MyThread thrd3 = new MyThread(tg, "MyThread #3"); thrd.start(); thrd2.start(); thrd3.start(); Thread.sleep(1000); System.out.println(tg.activeCount() + " threads in thread group."); Thread thrds[] = new Thread[tg.activeCount()]; tg.enumerate(thrds); for (Thread t : thrds) System.out.println(t.getName()); thrd.myStop(); Thread.sleep(1000); System.out.println(tg.activeCount() + " threads in tg."); tg.interrupt(); } }
상기 코드 를 통 해 알 수 있 듯 이 ThreadGroup 은 Executor Service 보다 다음 과 같은 몇 가지 장점 이 많 습 니 다.
1.ThreadGroup 은 스 레 드 를 옮 겨 다 닐 수 있 습 니 다.스 레 드 가 이미 실행 되 었 고 실행 중인 것 을 알 수 있 습 니 다.
2.ThreadGroup.activeCount 를 통 해 얼마나 많은 스 레 드 가 있 는 지 알 수 있 고 삽 입 된 스 레 드 수 를 제어 할 수 있 습 니 다.
이 글 은 블 로그 원 에서 왔 습 니 다.http://www.cnblogs.com/yy2011/archive/2011/05/05/2037564.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.