spring线程池的使用示例,测试拒绝任务和任务装饰器

springboot使用线程池的实际应用(一) 在这个示例中,我们在UserService类中将TransactionTemplate和ApplicationContext添加到构造函数中,并将UserProcessor的处理方法改为接受一个boolean类型的参数,该参数表示异步线程是否需要在一个活动的事务中执行。此时所有用户的处理操作都会在各自线程中并发执行,当所有用户处理完成后,我们可以将结果回写到数据库中。在上面的代码示例中,我们使用了线程安全的ExecutorService线程池,并且在更新用户数据时,使用了线程安全的数据库操作对象。 阅读详情

corePoolSize:核心线程数。 maximumPoolSize:最大线程数。表明线程中最多能够创建的线程数量。
keepAliveTime:空闲的线程保留的时间。 unit:空闲线程的保留时间单位。 BlockingQueue
workQueue:用于保存等待执行的任务的阻塞队列。可以选择以下几个阻塞队列。
1、ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
2、LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出)
排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列
3、SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
4、PriorityBlockingQueue:一个具有优先级的无限阻塞队列。
threadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程做些更有意义的事情,比如设置daemon和优先级等等
handler:饱和策略处理器。默认提供的4中策略上面已经有解释了

通过测试方法,来测试线程池的拒绝任务和装饰器任务的使用

package com.myzy.auth.reetrantlock;

import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.ThreadPoolExecutor;

/**
 * 测试spring线程池,包装了JDK的ThreadPoolExecutor 提供了默认的最大线程池
 */
public class TestThreadPoolTaskExecutor {
    public static void main(String[] args) {
        ThreadPoolTaskExecutor threadPoolExecutor = new ThreadPoolTaskExecutor();
        threadPoolExecutor.setAllowCoreThreadTimeOut(true);
        threadPoolExecutor.setCorePoolSize(2);
        threadPoolExecutor.setMaxPoolSize(4);
        threadPoolExecutor.setQueueCapacity(10);
        threadPoolExecutor.setTaskDecorator(runnable -> {//线程任务的装饰器
            System.out.println("执行任务前执行,装饰线程任务");
            return () -> {
                runnable.run();
                System.out.println("执行线程后执行");
            };
        });
        threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//抛出异常来拒绝
        threadPoolExecutor.initialize();

        for (int i = 0; i < 10000; i++) {
            threadPoolExecutor.execute(() -> {
                try {
                    Thread.sleep(1000L);
                    System.out.println("任务执行");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }
    }
}

执行结果

"C:\Program Files\Java\jdk1.8.0_231\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar=55291:C:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_231\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\rt.jar;D:\work\code\auth\target\classes;D:\work\repository\org\springframework\cloud\spring-cloud-openfeign-core\2.2.5.RELEASE\spring-cloud-openfeign-core-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-autoconfigure\2.2.3.RELEASE\spring-boot-autoconfigure-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot\2.2.3.RELEASE\spring-boot-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-netflix-ribbon\2.2.5.RELEASE\spring-cloud-netflix-ribbon-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-netflix-archaius\2.2.5.RELEASE\spring-cloud-netflix-archaius-2.2.5.RELEASE.jar;D:\work\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;D:\work\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;D:\work\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;D:\work\repository\commons-io\commons-io\2.2\commons-io-2.2.jar;D:\work\repository\org\springframework\cloud\spring-cloud-starter-openfeign\2.2.5.RELEASE\spring-cloud-starter-openfeign-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-starter\2.2.5.RELEASE\spring-cloud-starter-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\security\spring-security-rsa\1.0.9.RELEASE\spring-security-rsa-1.0.9.RELEASE.jar;D:\work\repository\org\bouncycastle\bcpkix-jdk15on\1.64\bcpkix-jdk15on-1.64.jar;D:\work\repository\org\bouncycastle\bcprov-jdk15on\1.64\bcprov-jdk15on-1.64.jar;D:\work\repository\org\springframework\spring-web\5.2.3.RELEASE\spring-web-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-beans\5.2.3.RELEASE\spring-beans-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-core\5.2.3.RELEASE\spring-core-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-jcl\5.2.3.RELEASE\spring-jcl-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-commons\2.2.5.RELEASE\spring-cloud-commons-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\security\spring-security-crypto\5.2.1.RELEASE\spring-security-crypto-5.2.1.RELEASE.jar;D:\work\repository\io\github\openfeign\feign-core\10.10.1\feign-core-10.10.1.jar;D:\work\repository\io\github\openfeign\feign-slf4j\10.10.1\feign-slf4j-10.10.1.jar;D:\work\repository\io\github\openfeign\feign-hystrix\10.10.1\feign-hystrix-10.10.1.jar;D:\work\repository\com\netflix\archaius\archaius-core\0.7.6\archaius-core-0.7.6.jar;D:\work\repository\com\google\code\findbugs\jsr305\3.0.1\jsr305-3.0.1.jar;D:\work\repository\commons-configuration\commons-configuration\1.8\commons-configuration-1.8.jar;D:\work\repository\com\netflix\hystrix\hystrix-core\1.5.18\hystrix-core-1.5.18.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-web\2.2.3.RELEASE\spring-boot-starter-web-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-starter\2.2.3.RELEASE\spring-boot-starter-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-logging\2.2.3.RELEASE\spring-boot-starter-logging-2.2.3.RELEASE.jar;D:\work\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\work\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\work\repository\org\apache\logging\log4j\log4j-to-slf4j\2.12.1\log4j-to-slf4j-2.12.1.jar;D:\work\repository\org\apache\logging\log4j\log4j-api\2.12.1\log4j-api-2.12.1.jar;D:\work\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\work\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\work\repository\org\yaml\snakeyaml\1.25\snakeyaml-1.25.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-json\2.2.3.RELEASE\spring-boot-starter-json-2.2.3.RELEASE.jar;D:\work\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.10.2\jackson-datatype-jdk8-2.10.2.jar;D:\work\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.10.2\jackson-datatype-jsr310-2.10.2.jar;D:\work\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.10.2\jackson-module-parameter-names-2.10.2.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-tomcat\2.2.3.RELEASE\spring-boot-starter-tomcat-2.2.3.RELEASE.jar;D:\work\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.30\tomcat-embed-core-9.0.30.jar;D:\work\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.30\tomcat-embed-el-9.0.30.jar;D:\work\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.30\tomcat-embed-websocket-9.0.30.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-validation\2.2.3.RELEASE\spring-boot-starter-validation-2.2.3.RELEASE.jar;D:\work\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;D:\work\repository\org\hibernate\validator\hibernate-validator\6.0.18.Final\hibernate-validator-6.0.18.Final.jar;D:\work\repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;D:\work\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\work\repository\org\springframework\spring-webmvc\5.2.3.RELEASE\spring-webmvc-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-context\5.2.3.RELEASE\spring-context-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-expression\5.2.3.RELEASE\spring-expression-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-actuator\2.2.3.RELEASE\spring-boot-starter-actuator-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.2.3.RELEASE\spring-boot-actuator-autoconfigure-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-actuator\2.2.3.RELEASE\spring-boot-actuator-2.2.3.RELEASE.jar;D:\work\repository\io\micrometer\micrometer-core\1.3.2\micrometer-core-1.3.2.jar;D:\work\repository\org\hdrhistogram\HdrHistogram\2.1.11\HdrHistogram-2.1.11.jar;D:\work\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2.2.3.RELEASE\spring-cloud-starter-alibaba-nacos-discovery-2.2.3.RELEASE.jar;D:\work\repository\com\alibaba\nacos\nacos-client\1.3.3\nacos-client-1.3.3.jar;D:\work\repository\com\alibaba\nacos\nacos-common\1.3.3\nacos-common-1.3.3.jar;D:\work\repository\org\apache\httpcomponents\httpasyncclient\4.1.4\httpasyncclient-4.1.4.jar;D:\work\repository\org\apache\httpcomponents\httpcore\4.4.13\httpcore-4.4.13.jar;D:\work\repository\org\apache\httpcomponents\httpcore-nio\4.4.13\httpcore-nio-4.4.13.jar;D:\work\repository\com\alibaba\nacos\nacos-api\1.3.3\nacos-api-1.3.3.jar;D:\work\repository\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9.jar;D:\work\repository\com\google\guava\guava\29.0-jre\guava-29.0-jre.jar;D:\work\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;D:\work\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\work\repository\org\checkerframework\checker-qual\2.11.1\checker-qual-2.11.1.jar;D:\work\repository\com\google\errorprone\error_prone_annotations\2.3.4\error_prone_annotations-2.3.4.jar;D:\work\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;D:\work\repository\commons-codec\commons-codec\1.13\commons-codec-1.13.jar;D:\work\repository\io\prometheus\simpleclient\0.5.0\simpleclient-0.5.0.jar;D:\work\repository\com\alibaba\spring\spring-context-support\1.0.10\spring-context-support-1.0.10.jar;D:\work\repository\org\springframework\cloud\spring-cloud-context\2.2.5.RELEASE\spring-cloud-context-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-starter-netflix-ribbon\2.2.5.RELEASE\spring-cloud-starter-netflix-ribbon-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-starter-netflix-archaius\2.2.5.RELEASE\spring-cloud-starter-netflix-archaius-2.2.5.RELEASE.jar;D:\work\repository\com\netflix\ribbon\ribbon\2.3.0\ribbon-2.3.0.jar;D:\work\repository\com\netflix\ribbon\ribbon-transport\2.3.0\ribbon-transport-2.3.0.jar;D:\work\repository\io\reactivex\rxnetty-contexts\0.4.9\rxnetty-contexts-0.4.9.jar;D:\work\repository\io\reactivex\rxnetty-servo\0.4.9\rxnetty-servo-0.4.9.jar;D:\work\repository\javax\inject\javax.inject\1\javax.inject-1.jar;D:\work\repository\io\reactivex\rxnetty\0.4.9\rxnetty-0.4.9.jar;D:\work\repository\com\netflix\ribbon\ribbon-core\2.3.0\ribbon-core-2.3.0.jar;D:\work\repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\work\repository\com\netflix\ribbon\ribbon-httpclient\2.3.0\ribbon-httpclient-2.3.0.jar;D:\work\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\work\repository\org\apache\httpcomponents\httpclient\4.5.10\httpclient-4.5.10.jar;D:\work\repository\com\sun\jersey\jersey-client\1.19.1\jersey-client-1.19.1.jar;D:\work\repository\com\sun\jersey\jersey-core\1.19.1\jersey-core-1.19.1.jar;D:\work\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;D:\work\repository\com\sun\jersey\contribs\jersey-apache-client4\1.19.1\jersey-apache-client4-1.19.1.jar;D:\work\repository\com\netflix\servo\servo-core\0.12.21\servo-core-0.12.21.jar;D:\work\repository\com\netflix\netflix-commons\netflix-commons-util\0.3.0\netflix-commons-util-0.3.0.jar;D:\work\repository\com\netflix\ribbon\ribbon-loadbalancer\2.3.0\ribbon-loadbalancer-2.3.0.jar;D:\work\repository\com\netflix\netflix-commons\netflix-statistics\0.1.1\netflix-statistics-0.1.1.jar;D:\work\repository\io\reactivex\rxjava\1.3.8\rxjava-1.3.8.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2.2.3.RELEASE\spring-cloud-starter-alibaba-nacos-config-2.2.3.RELEASE.jar;D:\work\repository\org\projectlombok\lombok\1.18.10\lombok-1.18.10.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-jdbc\2.2.3.RELEASE\spring-boot-starter-jdbc-2.2.3.RELEASE.jar;D:\work\repository\com\zaxxer\HikariCP\3.4.2\HikariCP-3.4.2.jar;D:\work\repository\org\springframework\spring-jdbc\5.2.3.RELEASE\spring-jdbc-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-tx\5.2.3.RELEASE\spring-tx-5.2.3.RELEASE.jar;D:\work\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\1.3.2\mybatis-spring-boot-starter-1.3.2.jar;D:\work\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\1.3.2\mybatis-spring-boot-autoconfigure-1.3.2.jar;D:\work\repository\org\mybatis\mybatis\3.4.6\mybatis-3.4.6.jar;D:\work\repository\org\mybatis\mybatis-spring\1.3.2\mybatis-spring-1.3.2.jar;D:\work\repository\mysql\mysql-connector-java\8.0.19\mysql-connector-java-8.0.19.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-data-redis\2.2.3.RELEASE\spring-boot-starter-data-redis-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\data\spring-data-redis\2.2.4.RELEASE\spring-data-redis-2.2.4.RELEASE.jar;D:\work\repository\org\springframework\data\spring-data-keyvalue\2.2.4.RELEASE\spring-data-keyvalue-2.2.4.RELEASE.jar;D:\work\repository\org\springframework\spring-oxm\5.2.3.RELEASE\spring-oxm-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-context-support\5.2.3.RELEASE\spring-context-support-5.2.3.RELEASE.jar;D:\work\repository\io\lettuce\lettuce-core\5.2.1.RELEASE\lettuce-core-5.2.1.RELEASE.jar;D:\work\repository\io\netty\netty-common\4.1.45.Final\netty-common-4.1.45.Final.jar;D:\work\repository\io\netty\netty-handler\4.1.45.Final\netty-handler-4.1.45.Final.jar;D:\work\repository\io\netty\netty-buffer\4.1.45.Final\netty-buffer-4.1.45.Final.jar;D:\work\repository\io\netty\netty-codec\4.1.45.Final\netty-codec-4.1.45.Final.jar;D:\work\repository\io\netty\netty-transport\4.1.45.Final\netty-transport-4.1.45.Final.jar;D:\work\repository\io\netty\netty-resolver\4.1.45.Final\netty-resolver-4.1.45.Final.jar;D:\work\repository\io\projectreactor\reactor-core\3.3.2.RELEASE\reactor-core-3.3.2.RELEASE.jar;D:\work\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-data-mongodb\2.2.3.RELEASE\spring-boot-starter-data-mongodb-2.2.3.RELEASE.jar;D:\work\repository\org\mongodb\mongodb-driver\3.11.2\mongodb-driver-3.11.2.jar;D:\work\repository\org\mongodb\bson\3.11.2\bson-3.11.2.jar;D:\work\repository\org\mongodb\mongodb-driver-core\3.11.2\mongodb-driver-core-3.11.2.jar;D:\work\repository\org\springframework\data\spring-data-mongodb\2.2.4.RELEASE\spring-data-mongodb-2.2.4.RELEASE.jar;D:\work\repository\org\springframework\data\spring-data-commons\2.2.4.RELEASE\spring-data-commons-2.2.4.RELEASE.jar;D:\work\repository\org\apache\shiro\shiro-spring\1.3.2\shiro-spring-1.3.2.jar;D:\work\repository\org\apache\shiro\shiro-core\1.3.2\shiro-core-1.3.2.jar;D:\work\repository\commons-beanutils\commons-beanutils\1.8.3\commons-beanutils-1.8.3.jar;D:\work\repository\org\apache\shiro\shiro-web\1.3.2\shiro-web-1.3.2.jar;D:\work\repository\com\xuxueli\xxl-job-core\2.3.0\xxl-job-core-2.3.0.jar;D:\work\repository\io\netty\netty-all\4.1.45.Final\netty-all-4.1.45.Final.jar;D:\work\repository\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;D:\work\repository\org\codehaus\groovy\groovy\2.5.9\groovy-2.5.9.jar;D:\work\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-aop\2.2.3.RELEASE\spring-boot-starter-aop-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-aop\5.2.3.RELEASE\spring-aop-5.2.3.RELEASE.jar;D:\work\repository\org\aspectj\aspectjweaver\1.9.5\aspectjweaver-1.9.5.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-sentinel\2.1.1.RELEASE\spring-cloud-starter-alibaba-sentinel-2.1.1.RELEASE.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-alibaba-sentinel\2.1.1.RELEASE\spring-cloud-alibaba-sentinel-2.1.1.RELEASE.jar;D:\work\repository\com\alibaba\csp\sentinel-transport-simple-http\1.8.0\sentinel-transport-simple-http-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-transport-common\1.8.0\sentinel-transport-common-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-datasource-extension\1.8.0\sentinel-datasource-extension-1.8.0.jar;D:\work\repository\com\alibaba\fastjson\1.2.71\fastjson-1.2.71.jar;D:\work\repository\com\alibaba\csp\sentinel-annotation-aspectj\1.8.0\sentinel-annotation-aspectj-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-core\1.8.0\sentinel-core-1.8.0.jar;D:\work\repository\org\aspectj\aspectjrt\1.9.5\aspectjrt-1.9.5.jar;D:\work\repository\com\alibaba\csp\sentinel-web-servlet\1.8.0\sentinel-web-servlet-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-spring-webflux-adapter\1.8.0\sentinel-spring-webflux-adapter-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-reactor-adapter\1.8.0\sentinel-reactor-adapter-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-parameter-flow-control\1.8.0\sentinel-parameter-flow-control-1.8.0.jar;D:\work\repository\com\googlecode\concurrentlinkedhashmap\concurrentlinkedhashmap-lru\1.4.2\concurrentlinkedhashmap-lru-1.4.2.jar;D:\work\repository\com\alibaba\csp\sentinel-cluster-server-default\1.8.0\sentinel-cluster-server-default-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-cluster-common-default\1.8.0\sentinel-cluster-common-default-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-cluster-client-default\1.8.0\sentinel-cluster-client-default-1.8.0.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-alibaba-sentinel-datasource\2.2.3.RELEASE\spring-cloud-alibaba-sentinel-datasource-2.2.3.RELEASE.jar;D:\work\repository\com\fasterxml\jackson\core\jackson-core\2.10.0\jackson-core-2.10.0.jar;D:\work\repository\com\fasterxml\jackson\core\jackson-databind\2.10.0\jackson-databind-2.10.0.jar;D:\work\repository\com\fasterxml\jackson\core\jackson-annotations\2.10.2\jackson-annotations-2.10.2.jar" com.myzy.auth.reetrantlock.TestThreadPoolTaskExecutor
22:02:23.623 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
执行任务前执行,装饰线程任务
Exception in thread "main" org.springframework.core.task.TaskRejectedException: Executor [org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor$1@42d3bd8b[Running, pool size = 4, active threads = 4, queued tasks = 10, completed tasks = 0]] did not accept task: com.myzy.auth.reetrantlock.TestThreadPoolTaskExecutor$$Lambda$2/762218386@26ba2a48
	at org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(ThreadPoolTaskExecutor.java:317)
	at com.myzy.auth.reetrantlock.TestThreadPoolTaskExecutor.main(TestThreadPoolTaskExecutor.java:28)
Caused by: java.util.concurrent.RejectedExecutionException: Task com.myzy.auth.reetrantlock.TestThreadPoolTaskExecutor$$Lambda$3/672320506@dfd3711 rejected from org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor$1@42d3bd8b[Running, pool size = 4, active threads = 4, queued tasks = 10, completed tasks = 0]
	at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
	at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
	at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
	at org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor$1.execute(ThreadPoolTaskExecutor.java:238)
	at org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(ThreadPoolTaskExecutor.java:314)
	... 1 more
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行
任务执行
执行线程后执行

Process finished with exit code 130

通过测试,以及执行结果可以看到,我们设置的拒绝策略和装饰器任务都执行了,希望在生产业务中有所使用和帮助!!!

Java装饰器模式实战:从IO源码到Spring事务的动态能力叠加 装饰器模式是一种通过组合而非继承来动态扩展对象功能的设计思想,其核心在于统一接口、持有委托、责任分离。它解决了多维度功能自由组合时的类爆炸问题,天然契合开闭原则与单一职责原则。在Java生态中,该模式广泛应用于标准IO(如BufferedReader)、Spring AOP(@Transactional代理链)、HTTP客户端增强(日志、计时、熔断)等场景,是理解框架底层机制与构建高可维护性系统的关键范式。掌握装饰器模式,意味着能精准识别何时‘叠加能力’优于‘修改逻辑’,从而写出更清晰、更易测试、更易演进的 阅读详情

相关推荐

Spring Boot全局TraceId实现:MDC+拦截器构建全链路日志追踪

在分布式系统和微服务架构中,日志分散是排查线上问题的核心痛点。通过引入链路追踪(Trace)技术,可以为每个请求分配全局唯一标识(TraceId),实现请求全生命周期的行为串联。其技术原理主要基于线程上下文(如SLF4J的MDC)和拦截器机制,在请求入口生成并传递唯一ID,并借助日志框架自动输出。这一实践的核心技术价值在于将碎片化的日志按请求维度聚合,极大提升了问题定位效率和系统可观测性。在应用场景上,它不仅是微服务调用链追踪的基础,也是异步任务、消息队列等复杂场景下保障日志一致性的关键。本文以Spring

weixin_30940783的博客 621

线程及并发编程

线程及并发编程 为什么要使用并发编程?(并发编程的优点) 并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度,但是并发编程并不是总能提高程序的循行速度的,而且并发编程可能会遇到很多问题,比如内存泄露,上下文切换,线程安全,死锁等问题。 并行和并发有什么区别? 并发:多个任务在同一个CPU核上,按细节的时间片轮流(交替)执行,从逻辑上来看,哪些任务是同时执行 并行:单位时间内,多个处理器或多核处理器同时处理多个任务,是真正意义上的“同时执行” 串行:有n个任务,由一个线程按顺序执行。由于任务,方法都

m0_50266512的博客 366

spring 线程池实例

线程池例子线程池例子线程池例子线程池例子

ThreadLocal使用包括子线程传递实例

1.ThreadLocal的使用主要用于不同线程操作不安全变量时的线程保护 2.ThreadLocal=为Thread提供独有的ThreadLocalMap变量,通过Entry[] table方式存储线程本地变量 3.Thread持有ThreadLocal的引用,所以ThreadLocal需要设置成虚引用避免内存溢出,同时提供删除entry操作避免value值的内存溢出 代码示例 package com.myzy.auth.reetrantlock; public class TestThreadLoca

AnnotationZZ的博客 1039

zabbix 监控EMC存储

经过搜索,找到了脚本地址,该项目应该是模板原作者创建的,该项目也有zabbix模板,和上面的应该是相同的,我用的是上面的模板。./unity_get_state.py --api_ip='X.X.X.X' --api_port='443' --api_user='zabbix' --api_password='PASSWORD' --storage_name="zabbix web前端配置的主机名" --discovery。修改权限,给zabbix用户执行权限,模板调用时以zabbix用户执行。

wangyfde的专栏 3754

3分钟接入满血版DeepSeek-R1:字节火山引擎手把手教程!免费50万tokens!

3分钟接入满血版DeepSeek-R1:字节火山引擎手把手教程!免费50万tokens!

hunteritself的博客 2万+

Java线程池配置不当引发的线上事故分析与优化

线程池作为Java并发编程的核心组件,其工作原理基于生产者-消费者模型,通过复用线程降低资源消耗。合理配置corePoolSize、maximumPoolSize和workQueue等参数对系统稳定性至关重要,不当设置可能导致RejectedExecutionException或OOM等严重问题。在高并发场景下,建议采用有界队列配合自定义拒绝策略,结合CPU核心数计算公式确定线程数。典型应用包括订单处理、异步日志等IO密集型任务,通过ThreadPoolExecutor的监控接口可实时获取活跃线程数、队列深

weixin_33968104的博客 618

【语音识别算法】深度学习语音识别算法与传统语音识别算法的区别、对比及联系

深度学习语音识别算法与传统语音识别算法在理论基础、实现方式、性能表现等方面存在显著区别,同时也有一些联系。下面将从几个方面详细比较这两种方法,并给出应用实例和代码示例。

weixin_51306394的博客 2567

springcloud接入dynamic-tp动态线程池

springcloud接入dynamic-tp动态线程池

Erica_java的博客 1291

大开眼界的十大开源人工智能项目

这是一个强大的开源工具,能让你在不同框架之间自由切换,无需重写代码。它是一个开源工具,能用简单的SQL语言同时处理数据和AI模型,让一切变得有序而高效。Rasa是我开发智能聊天机器人时的首选,它让你轻松掌控机器人对话的每个细节。我经常用它快速验证模型在不同框架下的表现,省去了大量烦躁的调试过程。最近发现的Vapi是一个以API方式提供的语音AI工具,开发者友好程度超乎想象。KNIME是一个以拖拽方式构建数据分析流程的开源工具,仿佛是数据界的乐高积木。它像个忠诚的守门员,确保你的模型始终健康运行。

wjianwei666的专栏 1104

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

qq_45834835的博客 2603

后台任务无痕消失排查指南:从进程生命周期到防御性编程

在分布式系统和异步处理场景中,进程与线程的生命周期管理是保障系统稳定性的基础。理解进程的正常退出、异常终止及被外部信号杀死等不同终局状态,是排查问题的首要原理。其技术价值在于,通过厘清这些底层机制,开发者可以构建有效的监控与告警体系,避免因任务静默失败导致的数据不一致和资源泄漏风险。应用场景广泛覆盖后台服务、定时任务调度以及容器化部署环境。本文聚焦于Java Spring Boot生态,针对线程池任务静默丢弃、@Scheduled任务异常中止等典型问题,提供了从操作系统命令、JVM工具到APM探针的完整痕迹

weixin_33889245的博客 476

AD9361功能介绍和使用

AD9361使用分数分频锁相环(PLL)来产生发射机和接收机本地振荡器(LO)频率和BB PLL。BB PLL 可用于数据转换、数字滤波器和 |/O 端口。PLL的参考时钟可以由外部振荡器或外部晶体(XO)和数字可编程片内可变电容提供,电容微调产生参考时钟频率,XO和微调电容的组合统称为DCXO。有多个天线输入的分集系统。接收链数据首先经过低噪声放大器(LNA),然后是同相(1)和正交(Q)放大器,混频器和频带整形滤波器,可将接收到的信号下变频为基带以进行数字化。时分双工(TDD)和频分双工(FDD)。。。

wangjie36的博客 1万+

《SpringBoot2.0 实战》系列-异步多线程调用

前言: 异步在工作中越来越多的被使用到,比如:推送提醒、服务之间调用、数据同步等。最近我就遇到一个需求,【发布公告的时候需要调用第三方的接口发送短信】,这时我们就可以用异步实现短信发送,即可保证接口的响应速度,又可保证接口不受三方接口的超时、异常影响。 聊聊异步和同步: 同步:一件事一件事的做;【吃饭、睡觉、打豆豆】就是一个同步的过程; 异步:多件事一起做;【边吃边聊】就是一个异步的过程;...

小葫芦的博客 3103

Modbus协议全家桶(C#纯原生完整版):ModbusRTU + ModbusTCP + ModbusASCII 协议规范+完整封装+工业级实战

你已经掌握了C#串口/网口原生核心API和工业通信协议本质,而今天的主角Modbus协议,是工业通信领域绝对的王者、通用的标准、入门的必修课,没有之一。凡是做工业通信开发,必会Modbus协议;市面上99%的工业设备(PLC、变频器、温控仪、传感器、流量计、扫码枪)都原生支持Modbus协议。Modbus协议不是单一协议,而是一个「协议家族」,我们常说的就是这个家族的三大核心成员,也是工业现场的全部Modbus应用形态。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 562

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 730

Java线程池性能优化实战与核心参数解析

线程池作为并发编程的核心组件,通过线程复用机制显著提升系统资源利用率。其工作原理基于生产者-消费者模型,通过核心线程数、最大线程数、任务队列等参数的组合控制任务执行流程。合理配置线程池能有效平衡CPU利用率与上下文切换开销,在电商秒杀、实时交易等高并发场景中尤为重要。本文以Java ThreadPoolExecutor为例,深入解析七大核心参数的工程实践意义,包括IO密集型场景的线程数计算公式(corePoolSize = CPU核数 * (1 + IO等待/计算时间)),以及队列选择(Synchronou

weixin_33714884的博客 314

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java面试高频考点:HashMap、ConcurrentHashMap与线程池深度解析

在Java技术面试中,数据结构与并发编程是核心考察点。HashMap作为基础数据结构,其底层采用数组+链表+红黑树实现,通过扰动函数优化哈希分布,树化阈值设定则体现了空间与时间的平衡。ConcurrentHashMap的线程安全实现从分段锁演进到CAS+synchronized,反映了Java并发模型的优化方向。线程池配置涉及七个关键参数,合理设置可提升系统稳定性,如corePoolSize需根据任务类型调整,拒绝策略选择直接影响系统容错能力。理解这些技术的底层原理和适用场景,能帮助开发者在高并发环境下构建

weixin_30954265的博客 502

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

企业级微信机器人:构建高性能Java自动化解决方案的5大架构优势

在当今数字化办公环境中,微信个人号自动化已成为企业提升运营效率、实现智能客服、自动化营销的关键技术需求。wechat-api作为一个基于Java 7+的微信个人号API客户端,为企业级微信机器人开发提供了完整的解决方案。该项目通过清晰的架构设计和丰富的扩展点,解决了传统微信自动化面临的协议复杂性、会话管理、消息类型多样性和并发处理等核心挑战,为技术决策者和架构师提供了稳定可靠的自动化基础框架。

gitblog_01048的博客 1003

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

异步异常处理器AsyncUncaughtExceptionHandler

异步异常处理器AsyncUncaughtExceptionHandler

你个无聊小demo的博客 825

【序列晋升】14 Spring Cloud Circuit Breaker:微服务架构的弹性守护者

Spring Cloud Circuit Breaker是微服务架构中防止服务雪崩的关键容错组件,它通过熔断、降级、限流等机制保护服务调用链路,确保系统整体稳定性。 作为Spring Cloud生态系统的核心组件之一,它为分布式系统提供了断路器模式的实现,能够有效应对服务间依赖导致的级联故障。

愚者Turbo的博客 1176

Java工程师成长指南:从核心基础到高并发与微服务架构

面向对象编程(OOP)和Java虚拟机(JVM)是Java技术体系的核心基石。OOP通过封装、继承和多态等思想构建出模块化、可复用的代码结构,而JVM则作为Java程序的运行环境,负责内存管理、垃圾回收和字节码执行。深入理解JVM内存模型、垃圾回收机制以及并发编程中的可见性、原子性和有序性问题,对于构建高性能、高可用的系统至关重要。这些底层原理支撑了现代Java开发中广泛使用的Spring Boot框架、微服务架构以及应对高并发场景的虚拟线程(Virtual Threads)等技术。在实际的工程实践中,从环

weixin_34378969的博客 392

后端大厂面试总结大全

1、首先,通过BeanDefinitionReader 读取指定的配置文件生成bean的定义信息,然后到完整的bean定义信息(BeanDefinition对象),注意这里只是存储bean的定义信息,还没有实例化bean对象;就像工厂里面一样,原材料已经准备好了,但是还没有进行生产,原材料就是beanDefinition,生产就是实例化。2、在 BeanDefinition 和 完整BeanDefinition 中间通过一个后置增强器,可以对bean的定义信息进行统一修改,只需要实现 BeanFactory

zouyang920的博客 426

【springboot】万字操作指南 Spring Boot 2.x 升级到 3.x:微服务项目实战

摘要: 本文提供Spring Boot 2.x升级到3.x的实战指南,重点针对微服务项目。升级涉及JDK 17、Spring Framework 6、Jakarta EE等连锁变化,需系统规划版本矩阵(如Spring Boot 3.5.x + Spring Cloud 2025.0.x)。建议升级路线:先统一JDK 17环境,再处理依赖迁移(javax→jakarta)、Spring Security 6适配、OAuth2授权服务器改造等关键步骤。

Cjh20pan的博客 969

java八股文极速版

时间和空间的权衡 值越高空间开销小但是增加了查找开销服务于从Key映射到index的Hash算法,在性能和内存的使用上取平衡,实现一个尽量均匀分布的Hash函数,选取16,是通过位运算的方法进行求取的。线程安全:当多线程执行同一段程序的时候,如果发生了和预期结果不一致的情况,就是线程不安全的,如果和预期结果一致就是线程安全的,可以加锁解决(把并行运行的线程变成串行化执行)。1.加锁 利用Synchronized或者ReenTrantLock来对不安全对象进行加锁。

PassionAnytime的博客 382
上一篇: ThreadLocal使用包括子线程传递实例
下一篇: 设计模式Demo之简单工厂模式(含代码)
烫手的砖
博客等级 码龄8年 7粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值