자바 의 몇 가지 스 레 드 탱크 유형 소개 및 사용 방법 에 대해 상세히 이야기 하 다.
•단일 작업 처리 시간 이 짧다
•처리 해 야 할 임무 의 수량 이 많다
2.자바 스 레 드 풀 을 사용 하면 좋 은 점
1.new Thread()를 사용 하여 스 레 드 를 만 드 는 단점:
•new Thread()를 통 해 대상 을 만 들 때마다 성능 이 좋 지 않 습 니 다.
•스 레 드 는 통일 적 인 관리 가 부족 하여 새로운 스 레 드 를 제한 하지 않 고 서로 경쟁 할 수 있 으 며 너무 많은 시스템 자원 을 점용 하여 다운 되 거나 oom 을 초래 할 수 있 습 니 다.
•정시 실행,정기 실행,스 레 드 중단 등 더 많은 기능 이 부족 합 니 다.
2.자바 스 레 드 풀 을 사용 하 는 장점:
•존재 하 는 스 레 드 를 다시 사용 하여 대상 의 생 성,소멸 비용 을 줄 이 고 성능 을 향상 시 킵 니 다.
•최대 병발 라인 수 를 효과적으로 제어 하고 시스템 자원 의 사용률 을 높 일 수 있 으 며 과도 한 자원 경쟁 을 피하 고 막힘 을 피 할 수 있다.
•정시 집행,정기 집행,단일 스 레 드,병발 수 제어 등 기능 을 제공 합 니 다.
자바 네 가지 스 레 드 탱크
자바 에 있 는 스 레 드 탱크 의 최상 위 인 터 페 이 스 는 Executor 이지 만 엄격 한 의미 에서 Executor 는 스 레 드 탱크 가 아니 라 스 레 드 를 실행 하 는 도구 입 니 다.진정한 스 레 드 탱크 인 터 페 이 스 는 Executor Service 입 니 다.다음 그림 은 스 레 드 탱크 의 유형 체계 구 조 를 완전 하 게 묘사 했다.
1. newCachedThreadPool
필요 에 따라 새 스 레 드 를 만 들 수 있 는 스 레 드 풀 을 만 들 지만 이전 구조의 스 레 드 가 사용 가능 할 때 다시 사용 합 니 다.단기 비동기 임 무 를 많이 수행 하 는 프로그램 에 있어 서 이러한 스 레 드 탱크 는 일반적으로 프로그램의 성능 을 향상 시 킬 수 있다.execute 를 호출 하면 이전 구조의 스 레 드 를 다시 사용 합 니 다.기 존 스 레 드 가 사용 되 지 않 으 면 새 스 레 드 를 만 들 고 풀 에 추가 합 니 다.60 초 동안 사용 되 지 않 은 스 레 드 를 종료 하고 캐 시 에서 제거 합 니 다.따라서 장시간 빈 스 레 드 탱크 는 자원 을 사용 하지 않 는 다.
public static ExecutorService newCachedThreadPool()
예제 코드:
public class ThreadPoolExecutorTest {
public static void main(String[] args ) {
ExecutorService cacheThreadPool =Executors.newCachedThreadPool();
for(int i =1;i<=5;i++){
final int index=i ;
try{
Thread.sleep(1000);
}catch(InterruptedException e ) {
e.printStackTrace();
}
cacheThreadPool.execute(new Runnable(){
@Override
public void run() {
System.out.println(" " +index +" " +Thread.currentThread().getName());
}
});
}
}
}
//
1 pool-1-thread-1
2 pool-1-thread-1
3 pool-1-thread-1
4 pool-1-thread-1 5 pool-1-thread-1
결 과 를 통 해 알 수 있 듯 이 두 번 째 임 무 를 수행 할 때 첫 번 째 임 무 는 이미 완성 되 었 고 첫 번 째 임 무 를 수행 하 는 스 레 드 를 다시 사용 할 것 이 며 매번 새 스 레 드 를 만 들 지 않 아 도 된다.2. newFixedThreadPool
지정 한 작업 스 레 드 수량의 스 레 드 풀 을 만 듭 니 다.작업 을 제출 할 때마다 작업 스 레 드 를 만 듭 니 다.작업 스 레 드 수가 스 레 드 탱크 의 초기 최대 수 에 도달 하면 제출 한 작업 을 풀 대기 열 에 저장 합 니 다.
public static ExecutorService newFixedThreadPool(int nThreads)
nThreads-풀 의 스 레 드 수
예제 코드:
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ExecutorService fixedThreadPool =Executors. newFixedThreadPool(3);
for (int i =1; i<=5;i++){
final int index=i ;
fixedThreadPool.execute(new Runnable(){
@Override
public void run() {
try {
System.out.println(" " +index + " " +Thread.currentThread().getName());
Thread.sleep(1000);
} catch(InterruptedException e ) {
e .printStackTrace();
}
}
});
}
}
}
최대 스 레 드 수가 3 으로 설정 되 어 있 기 때문에 세 개의 수 를 출력 한 후 2 초 를 기 다 렸 다가 출력 을 계속 합 니 다.2. newScheduledThreadPool
주어진 지연 후 명령 을 실행 하거나 정기 적 으로 실행 할 수 있 는 스 레 드 풀 을 만 듭 니 다.
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
core PoolSize-풀 에 저 장 된 스 레 드 수 는 스 레 드 가 비어 있어 도 포 함 됩 니 다.
실행 지연 예제 코드:
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3);
scheduledThreadPool.schedule(newRunnable(){
@Override
public void run() {
System.out.println(" ");
}
}, 3, TimeUnit.SECONDS);
}
}
3 초 지연예제 코드 를 정기 적 으로 실행 합 니 다:
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3);
scheduledThreadPool.scheduleAtFixedRate(newRunnable(){
@Override
public void run() {
System.out.println(" 1 ");
}
},1,3,TimeUnit.SECONDS);
}
}
1 초 지연 후 3 초 에 한 번 씩 실행 함 을 나타 낸다.4.newSingleThreadExecutor
하나의 워 커 스 레 드 를 사용 하 는 Executor 를 만 들 고 이 스 레 드 를 무 계 대기 열 로 실행 합 니 다.(닫 기 전 실행 에 실 패 했 기 때문에 이 단일 스 레 드 를 종료 하면 필요 하 다 면 새 스 레 드 가 후속 작업 을 대신 할 것 입 니 다).각 임 무 를 순서대로 수행 할 수 있 고 주어진 시간 에 여러 개의 스 레 드 가 활동 하지 않 습 니 다.다른 같은 효 과 를 가 진 new Fixed ThreadPool(1)과 달리 이 방법 으로 돌아 오 는 실행 프로그램 을 다시 설정 하지 않 아 도 다른 스 레 드 를 사용 할 수 있 습 니 다.
public static ExecutorService newSingleThreadExecutor()
예제 코드:
public class ThreadPoolExecutorTest {
public static void main(String[] args) {
ExecutorService singleThreadPool= Executors.newSingleThreadExecutor();
for(int i=1;i<=5;i++){
int index=i;
singleThreadPool.execute(new Runnable(){
@Override
public void run() {
try{
System.out.println(" "+index+" ");
Thread.sleep(2000);
}catch(InterruptedException e) {
e.printStackTrace();
}
} });
}
}
}
이상 의 이 편 은 자바 의 몇 가지 스 레 드 풀 유형 에 대한 소개 와 사용 방법 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 여러분 들 이 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.