목차
One: ThreadPoolTaskExecuto
2: ThreadPoolTaskScheduler
Three @Scheduled는 예약된 작업을 구현하고 주석은 예약된 작업을 활성화합니다
1 @ EnableAsync는 비동기 지원을 켭니다.
Java java지도 시간 Springboot 자체 스레드 풀을 구현하는 방법

Springboot 자체 스레드 풀을 구현하는 방법

Jun 28, 2023 pm 04:33 PM
스레드 풀

One: ThreadPoolTaskExecuto

1 ThreadPoolTaskExecutor 스레드 풀:

ThreadPoolTaskExecutor는 Java 자체 스레드 풀 ThreadPoolExecutor를 기반으로 하는 Spring의 보조 캡슐화입니다. 주요 목적은 Spring 프레임워크 시스템에서 스레드 풀을 더 편리하게 사용하도록 하는 것입니다. Spring 스레드 풀

2 ThreadPoolTaskExecutor를 사용하여 ioc에 빈 주입
구성 파일 형식, Spring이 자동으로 구성

## 默认线程池配置,ThreadPoolTaskExecutor 
# 核心线程数
spring.task.execution.pool.core-size=8  
# 最大线程数
spring.task.execution.pool.max-size=16
# 空闲线程存活时间
spring.task.execution.pool.keep-alive=60s
# 是否允许核心线程超时
spring.task.execution.pool.allow-core-thread-timeout=true
# 线程队列数量
spring.task.execution.pool.queue-capacity=100
# 线程关闭等待
spring.task.execution.shutdown.await-termination=false
spring.task.execution.shutdown.await-termination-period=
# 线程名称前缀
spring.task.execution.thread-name-prefix=demo_Thread
로그인 후 복사

구성 형식:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledFuture;
//@Configuration
public class ThreadConfig {
    @Value("${task.maxPoolSize}")
    private int maxPoolSize;
    //todo 其他的相关配置都可以通过配置文件中注入
    @Bean("ThreadPoolTaskExecutor")
    public Executor myAsync() {
        final ThreadPoolTaskExecutor executor =
                new ThreadPoolTaskExecutor();
        executor.setMaxPoolSize(maxPoolSize);
        //todo  其他参数设置
        //初始化
        executor.initialize();
        return executor;
    }
}
로그인 후 복사

3 스레드 생성 후 모든 스레드 풀을 ioc에서 가져옴

4 스레드 풀 처리 프로세스 :

(1) 코어 스레드 풀이 가득 찼는지 확인합니다. 그렇지 않은 경우 스레드를 생성하여 작업을 수행합니다. 코어 스레드 수가 가득 찼다면 작업 큐가 가득 찼는지 확인합니다. 작업 대기열이 가득 차면 최대 스레드 수를 확인하고, 스레드가 가득 차면 거부 정책에 따라 실행합니다.

(2) 거부 정책:

  • CallerRunsPolicy(): 원래 스레드 실행

  • AbortPolicy(): 직접 예외 발생

  • DiscardPolicy(): 직접 삭제

  • DiscardOldestPolicy(): 가장 오래된 작업 삭제 대기열

2: ThreadPoolTaskScheduler

1 ThreadPoolTaskScheduler는 정기적으로 작업 스레드 풀을 예약하여 비동기 작업을 처리합니다.

2 사용 방법: ThreadPoolTaskScheduler Bean 삽입

(1) 구성 파일 형식: ..
(2) 구성 클래스 형식:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ScheduledFuture;
@Configuration
public class ThreadPoolTaskSchedulerConfig {
    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        final ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        //设置等待任务在关机时l候完成
        threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
        //设置等待时间为60s
        threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
        return threadPoolTaskScheduler;
    }
}
로그인 후 복사

3 ThreadPoolTaskScheduler 예약 작업 사용

일반 스레드 풀 사용 수행:

  • 제출(호출 가능), 결과 실행 필요

  • 제출(실행 가능), 실행 결과 필요 없음

(1) 예약된 작업

작업 내용 추가 실행 가능, 실행 주기 설정 트리거/날짜, 트리거 표현 Baidu는

 schedule(Runnable task,Trigger)
 schedule(Runnable task,Date)
로그인 후 복사

(2) 간격 지정 작업 실행 시간, 시간 간격은 이전 작업 완료부터 시작까지입니다. 다음 작업, 밀리초

 scheduleWithFixedDelay(Runnable task,long delay)
로그인 후 복사

(3) 고정된 빈도로 작업을 실행하고, 작업이 시작된 후 간격을 두고 새 작업을 실행하고, 마지막 작업이 완료되면 마지막 작업 실행이 완료된 후 다음 작업이 실행될 때까지 기다립니다. Completed

 scheduleAtFixedRate(Runnable task,long delay)
로그인 후 복사

(4) 예약된 작업 취소:

예약된 작업 저장을 위한 컬렉션을 설정합니다. 예약된 작업 실행의 결과는 ScheduledFuture이며 컬렉션에 개체를 저장하고 ScheduledFuture<를 가져와 예약된 작업을 취소합니다. ;?> 컬렉션의 object.cancel(true)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Service;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.*;
@Service
public class SchedulerService {
    @Autowired
    ThreadPoolTaskScheduler scheduler;
    /**
     * 常规线程池使用
     */
    public void tesScheduler1() throws ExecutionException, InterruptedException {
        //无返回值
        final Future<?> demo_scheduler1 = scheduler.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("demo runnable scheduler");
            }
        });
        //无返回值
        final Future<?> demo_scheduler2 = scheduler.submit(new Callable<Object>() {
            @Override
            public Object call() throws Exception {
                System.out.println("demo callable  scheduler");
                return "callable";
            }
        });
        System.out.println("result:" + demo_scheduler2.get());
    }
    /**
     * 定时任务
     */
    public void tesScheduler2() throws ParseException {
        //CronTrigger表达式百度即可
        scheduler.schedule(() -> {
            System.out.println("定时任务");
        }, new CronTrigger("0/1****?"));
        //创建指定时间的日期
        final Date date = new Date(2023, 3, 26, 21, 35);
        final DateFormat format = new SimpleDateFormat();
        final Date parse = format.parse("2023-03-26-21-26");
        scheduler.schedule(() -> {
            System.out.println(new Date());
        }, parse);
    }
    /**
     * 指定时间间隔执行任务,上次任务结束到下次任务开始的时间间隔
     */
    public void tesScheduler3() {
        scheduler.scheduleWithFixedDelay(() -> {
            //todo
        }, 300L);
    }
    /**
     * 固定频率执行任务,在固定一段时间后便会执行下次任务,
     * 如果时间到了上次任务还没执行完毕则等待,
     * 直到上一次任务执行完毕后立马执行下次任务
     */
    public void tesScheduler4() {
        scheduler.scheduleAtFixedRate(new FutureTask<String>(new Callable<String>() {
                    @Override
                    public String call() throws Exception {
                        return null;
                    }
                }),
                200);
    }
    //取消定时任务队列
    public static ConcurrentMap<String, ScheduledFuture> map = new ConcurrentHashMap<>();
    public void startTask(String k1) {
        map.compute(k1, (k, v) -> {
            if (map.containsKey(k)) return v;
            map.put(k, v);
            return v;
        });
    }
}
로그인 후 복사

Three @Scheduled는 예약된 작업을 구현하고 주석은 예약된 작업을 활성화합니다

1 @EnableScheduled를 사용하여 지원을 활성화합니다

2 @Scheduled 주석 방법

(1 ) @Scheduled(fixedDelay=5000) 지연된 실행, 5초 후에 실행
(2) @Scheduled(fixedRate=5000) 예약된 실행, 5초마다 실행
(3) @Scheduled(corn="002* *?") 사용자 정의 실행 , corn 표현 Baidu, 이 실행 방법이 일반적으로 사용됩니다. corn="002**?"매일 오전 2시에 예약된 작업을 실행하기 시작합니다

3 @Scheduled로 시작한 작업은 단일 스레드이며, 쉬운 차단

(1) ThreadPoolTaskScheduler를 ioc에 삽입하면 Scheduled는 단일 스레드 차단 문제를 해결할 수 있는 ThreadPoolTaskScheduler 스레드 풀을 사용합니다.
(2) @Scheduled 및 @Async 주석은 @Async(" pool") 스레드 풀, 지정된 스레드 풀이 없으면 Spring의 SimpleAsyncTaskExecutor 스레드 풀이 사용됩니다. 이 스레드 풀은 매번 작업을 실행하기 위해 스레드를 추가하므로 비효율적입니다. 4: Spring의 비동기 작업

1 @ EnableAsync는 비동기 지원을 켭니다.

2 @Async는 비동기 작업을 활성화하고 스레드 풀을 지정합니다


참고: @Scheduled 및 @Async 주석은 예약된 작업을 활성화하고 스레드 풀이 아닌 경우 @Async("pool")에 스레드 풀을 지정합니다. 지정하면 Spring의 SimpleAsyncTaskExecutor 스레드 풀이 사용됩니다. 이 스레드 풀은 매번 작업을 실행하기 위해 스레드를 추가하므로 비효율적입니다. 그러나 @Async가 비동기 작업을 별도로 활성화하면 기본 스레드 풀이 사용됩니다. 필요에 따라 스레드 풀을 사용자 정의하는 것이 좋습니다. 참고: @Async의 반환 값은 void 또는 Future일 수 있으며 호출자와 @Async는 동일한 클래스에 있을 수 없습니다. 그렇지 않으면 aop가 사용되지 않습니다. : 사용자 정의 Java 스레드 풀 제시:

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
    @Async
    public void showThreadName1() {
        //默认线程池
        System.out.println(Thread.currentThread().getName());
    }
    @Async("myPool")//指定线程池
    public void showThreadName2() {
        System.out.println(Thread.currentThread().getName());
    }
}
로그인 후 복사

java 자체 스레드 풀, 캐시, 고정 수, 단일 스레드, 시간 제한,,,, 6~7가지 유형, 나중에 계속됨

위 내용은 Springboot 자체 스레드 풀을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python은 관광 명소 정보 및 리뷰를 획득하고 워드 클라우드 및 데이터 시각화를 생성합니다. Python은 관광 명소 정보 및 리뷰를 획득하고 워드 클라우드 및 데이터 시각화를 생성합니다. Apr 11, 2023 pm 08:49 PM

안녕하세요 여러분, 잔슈준이에요! 속담처럼: 멀리서 친구를 사귀는 것이 좋지 않을까요? 친구들이 우리와 함께 놀러 오는 것은 매우 행복한 일이므로 집주인이되어 친구들을 데리고 놀 수 있도록 최선을 다해야합니다! 그래서 질문은 언제 가장 좋은 시간과 어디로 가야 하는지, 그리고 가장 재미있는 장소는 어디인가 하는 것입니다. 오늘은 스레드 풀을 활용해 관광지 정보를 크롤링하고, 같은 여행의 데이터를 리뷰하고, 워드클라우드와 데이터 시각화를 만드는 방법을 차근차근 가르쳐드리겠습니다! ! ! 다양한 도시의 관광명소 정보를 알려드립니다. 데이터 크롤링을 시작하기 전에 먼저 스레드를 이해해 보겠습니다. 스레드 프로세스: 프로세스는 데이터 수집에 대한 코드의 실행 활동입니다. 이는 시스템의 리소스 할당 및 예약의 기본 단위입니다. 스레드(Thread) : 경량 프로세스, 프로그램 실행의 최소 단위, 프로세스의 실행 경로이다. 하나

Linux 시스템에서의 일반적인 서버 로드 문제 및 해결 방법 Linux 시스템에서의 일반적인 서버 로드 문제 및 해결 방법 Jun 18, 2023 am 09:22 AM

Linux는 서버 시스템에서 널리 사용되는 우수한 운영 체제입니다. Linux 시스템을 사용하는 과정에서 서버 부하 문제는 흔히 발생하는 현상입니다. 서버 부하란 서버의 시스템 리소스가 현재 요청을 충족할 수 없어 시스템 부하가 너무 높아져 서버 성능에 영향을 미치는 것을 의미합니다. 이 기사에서는 Linux 시스템에서 일반적인 서버 로드 문제와 해결 방법을 소개합니다. 1. CPU 부하가 너무 높습니다. 서버의 CPU 부하가 너무 높으면 시스템 응답 속도가 느려지고 요청 처리 시간이 길어지는 등의 문제가 발생합니다. C일 때

스레드 풀을 사용하여 Java 7에서 작업의 순환 스케줄링을 구현하는 방법 스레드 풀을 사용하여 Java 7에서 작업의 순환 스케줄링을 구현하는 방법 Jul 29, 2023 pm 10:37 PM

Java 7에서 스레드 풀을 사용하여 작업의 순환 예약을 구현하는 방법 소개: Java 애플리케이션을 개발할 때 스레드 풀을 사용하면 작업 실행 효율성과 리소스 활용도를 향상시킬 수 있습니다. Java7에서는 스레드 풀을 사용하여 작업의 순환 스케줄링을 쉽게 구현할 수 있습니다. 이 기사에서는 스레드 풀을 사용하여 Java7에서 작업의 순환 스케줄링을 구현하는 방법을 소개하고 해당 코드 예제를 첨부합니다. 1. 개요 : 스레드 풀은 잦은 생성을 방지하고 고정된 개수의 스레드를 재사용할 수 있는 멀티 스레드 처리 구조이다.

스레드 풀을 사용하여 Java 7에서 작업의 우선 순위 예약을 구현하는 방법 스레드 풀을 사용하여 Java 7에서 작업의 우선 순위 예약을 구현하는 방법 Jul 30, 2023 pm 06:38 PM

스레드 풀을 사용하여 Java7에서 작업 우선 순위 예약을 구현하는 방법 동시 프로그래밍에서 작업 우선 순위 예약은 일반적인 요구 사항입니다. Java는 작업을 쉽게 관리하고 예약할 수 있는 스레드 풀 메커니즘을 제공합니다. 이 기사에서는 스레드 풀을 사용하여 Java7에서 작업 우선순위 스케줄링을 구현하는 방법을 소개합니다. 먼저 Java7에서 스레드 풀의 기본 개념과 사용법을 이해해야 합니다. 스레드 풀은 여러 작업을 수행하기 위해 스레드 그룹을 관리하고 예약하는 스레드 재사용 메커니즘입니다. 자바 언급

마이크로서비스 아키텍처에서 서비스 스레드 풀 및 작업 예약을 처리하는 방법은 무엇입니까? 마이크로서비스 아키텍처에서 서비스 스레드 풀 및 작업 예약을 처리하는 방법은 무엇입니까? May 17, 2023 am 08:36 AM

엔터프라이즈급 애플리케이션에 마이크로서비스 아키텍처가 광범위하게 적용되면서 마이크로서비스의 성능과 안정성을 최적화하는 방법이 관심의 초점이 되었습니다. 마이크로서비스에서 마이크로서비스는 수천 개의 요청을 처리할 수 있으며, 서비스의 스레드 풀과 작업 예약도 마이크로서비스 성능과 안정성의 중요한 구성 요소입니다. 이 문서에서는 마이크로서비스 아키텍처의 스레드 풀 및 작업 예약과 마이크로서비스의 스레드 풀 및 작업 예약 성능을 최적화하는 방법을 소개합니다. 1. 마이크로서비스 아키텍처의 스레드 풀 마이크로서비스 아키텍처에서 마이크로서비스가 처리하는 각 요청은 해당 스레드 풀을 차지합니다.

스레드 풀 작업 예약을 위해 Java에서 ExecutorCompletionService 함수를 사용하는 방법 스레드 풀 작업 예약을 위해 Java에서 ExecutorCompletionService 함수를 사용하는 방법 Jun 26, 2023 pm 02:49 PM

인터넷 기술의 발전으로 멀티스레드 프로그래밍의 중요성이 점점 더 부각되고 있습니다. 동시성이 높은 프로그램을 작성할 때 멀티스레딩 기술을 최대한 활용하면 프로그램의 실행 효율성을 크게 향상시킬 수 있습니다. 그러나 멀티스레드 프로그래밍 자체에는 스레드 간 통신, 동기화 협력 등 많은 문제가 수반됩니다. 이러한 문제를 해결하기 위해 Java에서는 다양한 스레드 풀 프레임워크를 제공하고 있으며 그 중 ExecutorCompletionService가 있습니다. 이 기사에서는 ExecutorCompletionServi를 소개합니다.

스프링 스레드 풀은 어디에 구성되어 있나요? 스프링 스레드 풀은 어디에 구성되어 있나요? Jan 19, 2024 pm 04:55 PM

Spring 스레드 풀을 구성하는 방법: 1. ThreadPoolTaskExecutor Bean 사용 3. XML에서 TaskExecutor Bean 사용 5. 시스템 속성 또는 환경 변수를 통해 구성 7. 통합 및 컨테이너 8. 프로그래밍 방식 구성 9. 타사 프레임워크를 사용한 통합 11. 리소스 제한 사항 등을 고려합니다.

Springboot 자체 스레드 풀을 구현하는 방법 Springboot 자체 스레드 풀을 구현하는 방법 Jun 28, 2023 pm 04:33 PM

1: ThreadPoolTaskExecuto1 ThreadPoolTaskExecutor 스레드 풀: ThreadPoolTaskExecutor는 Java 자체 스레드 풀 ThreadPoolExecutor를 기반으로 하는 Spring의 보조 캡슐화입니다. 주요 목적은 Spring 프레임워크 시스템에서 스레드 풀을 더 편리하게 사용하는 것입니다. . ThreadPoolTaskExecutor를 사용하여 빈 주입 ioc의 구성 파일 양식으로 이동하면 Spring이 자동으로 ##Default 스레드 풀 구성인 ThreadPoolTaskExecutor#Core를 구성합니다.

See all articles