자바 스 레 드 탱크 를 사용 하여 다 중 스 레 드 만 들 기
배경: 자주 만 들 고 소각 하 며 사용량 이 매우 많은 자원, 예 를 들 어 동시 다발 상황 에서 의 스 레 드 는 성능 에 큰 영향 을 줍 니 다.
사고: 여러 개의 스 레 드 를 미리 만 들 고 스 레 드 탱크 에 넣 으 며 사용 할 때 직접 가 져 오고 사용 한 후에 풀 에 넣 습 니 다.빈번 한 창설 과 소각, 중복 이용 을 피 할 수 있다.생활 속 의 대중 교통 과 유사 하 다.
장점: 1. 응답 속도 향상 (새 스 레 드 를 만 드 는 시간 감소)
2. 자원 소 모 를 줄 입 니 다 (스 레 드 탱크 의 스 레 드 를 중복 이용 하여 매번 만 들 필요 가 없습니다)
3. 스 레 드 관리 에 편리 한 corePoolSize: 핵심 탱크 의 크기, maximumPoolSize: 최대 스 레 드 수, keepAliveTime: 스 레 드 가 작업 이 없 을 때 최대 얼마나 오래 유지 하면 종 료 됩 니 다.
JDK 5.0 기 는 스 레 드 풀 관련 API: ExecutorService 와 Executors 를 제공 합 니 다.
ExecutorService: 진정한 스 레 드 탱크 인터페이스 에서 흔히 볼 수 있 는 하위 클래스 ThreadPoolExecutor
void execute (Runnable command): 작업 / 명령 을 수행 하고 반환 값 이 없 으 며 보통 Runnable 을 수행 합 니 다.
Future submit (Callable task): 작업 을 수행 하고 반환 값 이 있 으 며 보통 Callable 을 수행 합 니 다.
void shutdown (): 연결 풀 닫 기
Executors: 도구 류, 스 레 드 탱크 의 공장 류, 서로 다른 유형의 스 레 드 탱크 를 만 들 고 되 돌려 줍 니 다.
Executors. newCachedThreadPool (): 필요 에 따라 새 스 레 드 를 만 들 수 있 는 스 레 드 풀 을 만 듭 니 다.
Executors.newFixedThreadPool(n); 고정 스 레 드 수 를 다시 사용 할 수 있 는 스 레 드 풀 을 만 듭 니 다.
Executors. newSingleThreadExecutor (): 하나의 스 레 드 만 있 는 스 레 드 풀 을 만 듭 니 다.
Executors. new Scheduled ThreadPool (n): 주어진 지연 후 명령 을 실행 하거나 정기 적 으로 실행 할 수 있 는 스 레 드 풀 을 만 듭 니 다.
class NumberThread implements Runnable{
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if(i % 2 == 0){
System.out.println(Thread.currentThread().getName()+ ":" + i);
}
}
}
}
class NumberThread1 implements Runnable{
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
if(i % 2 != 0){
System.out.println(Thread.currentThread().getName()+ ":" + i);
}
}
}
}
class NumberThread2 implements Callable{
@Override
public Object call() throws Exception {
for (int i = 0; i <= 100; i++) {
if(i % 2 == 0){
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
return null;
}
}
public class ThreadPool {
public static void main(String[] args) {
//
ExecutorService executorService = Executors.newFixedThreadPool(10);
// ThreadPoolExecutor ExecutorService
ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor)executorService;
threadPoolExecutor.setCorePoolSize(15);
System.out.println(executorService.getClass());
// , Runnable Callable
executorService.execute(new NumberThread());// Runnable
executorService.execute(new NumberThread1());
NumberThread2 numberThread2 = new NumberThread2();
FutureTask futureTask = new FutureTask(numberThread2);
executorService.submit(futureTask);// Callable
executorService.shutdown();//
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.