>  기사  >  Java  >  Executor 멀티스레딩 프레임워크를 사용하는 방법(예제 포함)

Executor 멀티스레딩 프레임워크를 사용하는 방법(예제 포함)

不言
不言원래의
2018-09-27 14:34:242505검색

이 기사의 내용은 Executor 멀티스레딩 프레임워크(예제 포함)를 사용하는 방법에 대한 것입니다. 이는 특정 참조 가치가 있으므로 도움이 필요한 친구에게 도움이 되기를 바랍니다.

JDK1.5에서 JAVA는 멀티스레드 애플리케이션의 보다 편리한 개발을 위해 캡슐화된 프레임워크(Executor)를 출시했습니다. 기존 Thread 클래스에 비해 Executor는 더 편리하고, 더 나은 성능을 가지며, 관리하기 더 쉽습니다. 스레드 풀을 지원합니다. 일반적으로 크롤러를 개발할 때 크롤러의 효율성을 높이기 위해서는 멀티스레딩이 필요하며, Executor는 매우 좋은 선택입니다.

공통 인터페이스:

1) 고정된 개수의 스레드로 스레드 풀 생성:

public static ExecutorService newFixedThreadPool(int nThreads)

2) 스레드 실행

void java.util.concurrent.Executor.execute( 실행 가능한 명령)

3) 현재 활성 스레드 수 보기

int java.util.concurrent.ThreadPoolExecutor.getActiveCount()

4) 모든 스레드 종료

void java.util.concrrent.ExecutorService.shutdonw()

Executor 여러 스레드를 관리할 때 효율적인 배치가 이루어집니다. 예를 들어 스레드 풀이 생성될 때 스레드 풀에 10개의 스레드가 있는 경우 처리를 위해 10개 이상의 Executor를 추가하여 스레드를 구현하면 효과적인 대기열 차단 및 스케줄링이 수행됩니다. 우리 개발자들에게 이는 투명하며 내부적으로 어떻게 작동하는지 신경 쓸 필요가 없습니다.

예제 코드:

package com.java.executor;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

public class ExecutorTest {
    private static Integer count = 1; //数量
    
    private static boolean flag = true;//是否执行
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);//在连接池中初始化10个线程
        while(flag){
            if(count<=100){
                executorService.execute(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("执行 : " + count++);
                    }
                });
            }else{
                //判断是否有活动线程
                if(((ThreadPoolExecutor)executorService).getActiveCount()==0){
                    executorService.shutdown();//结束所有线程
                    flag=false;
                    System.out.println("完成操作");
                }
            }
            try {
                Thread.sleep(100);//休息0.1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

이것은 Executor를 사용하는 간단한 방법이며, 편리하고 빠르며 배우기 쉽습니다. 여기서 왜 0.1초 동안 휴식을 취해야 합니까? 위 코드에는 잠금이 없습니다. 개수가 100보다 커질 때까지 이 코드를 사용하지 않으면 스레드는 여전히 활성 상태이고 스레드는 닫히지 않습니다. 또한 스레드 실행 속도가 우리의 요구 사항을 초과하므로 이러한 블록은 다음과 같은 경우에 사용됩니다. 크롤러가 웹페이지를 크롤링하는 것은 IP 속도를 차단하는 것이 매우 쉽습니다.

위 내용은 Executor 멀티스레딩 프레임워크를 사용하는 방법(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.