자바 스 레 드 탱크 와 스 레 드 공장 사용
3563 단어 자바 기반
package com.uno.thread;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.ThreadPoolExecutor.AbortPolicy;
/**
*
* @author uno
* 5:coreThreadCount: , 5 ,
* 10:maxthreadCount: , core , workBlockQueue ,
* new ArrayBlockingQueue(5): blockqueue , maxThreadCount
* maxThreadCount ,RejectedExecutionHandler
* shutdown: ,
* shutdownNow:
*/
/**
*
* 1. corePoolSize , , 。
2. corePoolSize , workQueue ,
3. workQueue , maximumPoolSize>corePoolSize ,
4. maximumPoolSize , RejectedExecutionHandler
5. corePoolSize , keepAliveTime ,
6. allowCoreThreadTimeOut(true) , corePoolSize keepAliveTime
* @author uno
*
*/
public class ThreadPool {
private static ThreadPoolExecutor executor = null;
static {
executor = new ThreadPoolExecutor(5, 10, 200,
TimeUnit.SECONDS, new ArrayBlockingQueue(5), new MyTaskThreadFactory(), new AbortPolicy()
);
executor.prestartCoreThread(); //
// executor.prestartAllCoreThreads();// corePoolSize
}
public static void main(String[] args) {
System.out.println(" : "+executor.getPoolSize());
for(int i = 0; i<15;i++){
System.out.println(executor.isShutdown());
executor.execute(new MyTask(i, "uno :"+i));
System.out.println(" : "+executor.getPoolSize());
System.out.println(" :" + executor.getQueue().size());
System.out.println(" :" + executor.getCompletedTaskCount());
}
executor.shutdown(); //
}
}
/**
*
* @author uno
*
*/
class MyTaskThreadFactory implements ThreadFactory{
private static String FACTORYNAME = "MYTASKFACTORY";
private static List super Thread> threadList = new ArrayList<>();
public void setFactoryName(String name){
FACTORYNAME = name;
}
@Override
public Thread newThread(Runnable r) {
synchronized (r) {
// Thread,
Thread t = new Thread(r, FACTORYNAME + threadList.size());
threadList.add(t);
return t;
}
}
}
/**
*
* @author uno
* : (MyTask)
*/
class MyTask extends Thread {
private int num;
public MyTask(int i, String name) {
super(name);
this.num = i;
}
@Override
public void run() {
try {
System.out.println(this.getName() + ", task " + num);
Thread.sleep(2000);
} catch (Exception e) {
}
System.out.println(this.getName() + ", task " + num + " ");
}
}
출력 결과:
위의
1. 스 레 드 탱크 가 corePoolSize 보다 작 을 때 새 제출 작업 은 새 스 레 드 를 만들어 작업 을 수행 합 니 다. 이 스 레 드 탱크 에 빈 스 레 드 가 있 더 라 도. 2. 스 레 드 탱크 가 corePoolSize 에 도 달 했 을 때 새 제출 작업 은 워 크 큐 에 넣 고 스 레 드 탱크 에서 작업 스케줄 링 이 실 행 될 때 까지 기 다 립 니 다. 3. 워 크 큐 가 가득 차 있 고 maximumPoolSize > corePoolSize 가 있 을 때 새 퀘 스 트 를 제출 하면 새 스 레 드 를 생 성하 여 퀘 스 트 를 수행 합 니 다. 4. 제출 퀘 스 트 수가 maximumPoolSize 를 초과 할 경우, 새 제출 퀘 스 트 는 Rejected Execution Handler 에서 처리 합 니 다. 5. 스 레 드 탱크 에서 corePoolSize 스 레 드 를 초과 하고 남 은 시간 이 keepAliveTime 에 이 르 렀 을 때 남 은 스 레 드 를 닫 습 니 다. 6. allowCoreThreadTimeOut (true) 을 설정 할 때 스 레 드 풀 에 있 는 corePoolSize 스 레 드 의 남 은 시간 이 keepAliveTime 에 이 르 면 닫 힙 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
범용 용법 예시앞으로 51CTO 에 정착 해 기술 개발 에 전념 할 테 니 잘 부탁드립니다.다음 코드 는 자신 이 (저자: 이 흥 화) 를 공부 할 때 두 드 린 코드 로 주석 이 완비 되 어 있다. 범용 클래스 Point. ja...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.