java ~ 스 레 드 탱크 의 총 결
4 대 유형의 스 레 드 탱크
스 레 드 탱크 의 주요 세 가지 매개 변수
core PoolSize: 스 레 드 탱크 의 기본 크기, 즉 작업 이 수행 되 지 않 을 때 스 레 드 탱크 의 크기, 그리고 작업 대기 열 이 가득 찬 상태 에서 만 이 수량 을 초과 하 는 스 레 드 를 만 들 수 있 습 니 다.여기 서 주의해 야 할 것 은 Thread PoolExecutor 를 만 들 었 을 때 스 레 드 가 바로 시작 되 지 않 고 작업 이 제출 될 때 까지 기 다 려 야 시작 합 니 다. prestartCoreThread / restartAllCoreThreads 가 핵심 스 레 드 를 미리 시작 하지 않 는 한.또한 keepAliveTime 과 allowCoreThreadTimeOut 시간 초과 매개 변수 의 영향 을 고려 하여 작업 을 수행 해 야 할 때 스 레 드 탱크 의 크기 가 반드시 core PoolSize 가 아 닙 니 다.maximumPoolSize: 스 레 드 탱크 에서 허용 하 는 최대 스 레 드 수, 스 레 드 탱크 의 현재 스 레 드 수 는 이 값 을 초과 하지 않 습 니 다.대기 열 에 작업 이 가득 차 있 고 현재 스 레 드 개수 가 maximumPoolSize 보다 작 으 면 새 스 레 드 를 만들어 작업 을 수행 합 니 다.여기 서 언급 할 만 한 것 은 largest PoolSize 입 니 다. 이 변 수 는 스 레 드 탱크 가 전체 수명 주기 에 나타 난 최대 스 레 드 개 수 를 기록 합 니 다.왜 옛날 이 라 고 하 죠?스 레 드 탱크 가 생 성 되면 setMaximumPoolSize () 를 호출 하여 실행 중인 최대 스 레 드 의 수 를 변경 할 수 있 기 때 문 입 니 다.poolSize: 스 레 드 탱크 의 현재 스 레 드 수량 은 이 값 이 0 일 때 스 레 드 가 없 으 면 스 레 드 탱크 가 종 료 됩 니 다.같은 시각 에 poolSize 는 maximum PoolSize 를 초과 하지 않 습 니 다.
관련 인 스 턴 스 코드
newCachedThreadPool 캐 시 풀
/**
* newCachedThreadPool , .
*/
@Test
public void newCachedThreadPool() {
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 20; i++) {
cachedThreadPool.execute(new Runnable() {
@Override
public void run() {
logger.info("cachedThreadPool :{}", Thread.currentThread().getName());
}
});
}
}
new Fixed ThreadPool 온라인 스 레 드 풀 을 제어 할 수 있 습 니 다.
/**
* newFixedThreadPool , .
*/
@Test
public void newFixedThreadPool() {
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
for (int i = 0; i < 20; i++) {
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
logger.info("fixedThreadPool :{}", Thread.currentThread().getName());
}
});
}
}
new Single ThreadExecutor 는 하나의 스 레 드 풀 만 있 고 스 레 드 에 이상 이 생 긴 후에 만 새로운 스 레 드 를 만 들 수 있 습 니 다.
/**
* newSingleThreadExecutor , , .
*/
@Test
public void newSingleThreadExecutor() {
ExecutorService newSingleThread = Executors.newSingleThreadExecutor();
for (int i = 0; i < 20; i++) {
newSingleThread.execute(new Runnable() {
@Override
public void run() {
logger.info("newSingleThread :{}", Thread.currentThread().getName());
}
});
}
}
new Scheduled ThreadPool 은 스케줄 링 기능 을 가 진 스 레 드 풀 로 주기 적 인 작업 을 수행 할 수 있 습 니 다.
/**
* newScheduledThreadPool
*/
@Test
public void newScheduledThreadPool() throws InterruptedException {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
executor.scheduleAtFixedRate(() -> {
long start = new Date().getTime();
System.out.println("scheduleAtFixedRate :" +
DateFormat.getTimeInstance().format(new Date()));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = new Date().getTime();
System.out.println("scheduleAtFixedRate =" + (end - start) / 1000 + "m");
System.out.println("scheduleAtFixedRate :" + DateFormat.getTimeInstance().format(new Date()));
System.out.println("======================================");
}, 0, 1, TimeUnit.SECONDS);//initialDelay ,period:
Thread.sleep(1000 * 10);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.