当前位置: 首页 > 知识库问答 >
问题:

spring ThreadPoolTaskExecutor在每次方法调用时创建新线程

慕金林
2023-03-14

我有以下ThreadPoolTaskExecator2配置

 <bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="10" />
    <property name="maxPoolSize" value="25" />
    <property name="queueCapacity" value="30" />
</bean>

在我的公共类AdminService中,我有两个方法。

  1. void triggerJob()
  2. 布尔执行sql(字符串sql)

如何将ThreadPoolTaskExecutor插入triggerJob方法,以便在第一个方法中调用executeSql时创建新线程。

在triggerjob中,我有一个基于条件调用executeSql的循环。

我是否需要创建一个私有类,实现runnable,以便ThreadPoolTaskExector可以执行此类,或者是否有可能创建没有runnable的线程?

我的想法是这样的

@Autowired    
ThreadPoolTaskExecutor threadPoolTaskExecutor;

     void triggerJob(){
           for( Object k:Objects){
               if(k.equals(something){
                //here new thread to be created somehow 
                threadPoolTaskExecutor.execute(executeSql(k.getSql())
               }
           }
        }

共有1个答案

方季同
2023-03-14

如果你必须这样做,你可以使用org.springframework.core.task.SimpleAsyncTaskExecator

<bean id="simpleTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor">
   <property name="concurrencyLimit" value="25" />
</bean>

但是创建一个Java线程是昂贵的。通常建议重用线程,即使SimpleAsyncTaskExecutor文档也会说:

注意:此实现不重用线程!请考虑使用线程池TaskExecitor实现,特别是在执行大量短期任务时。

 类似资料:
  • 我尝试在每次创建活动时运行以下线程。它第一次工作,但如果我按下后退按钮并尝试再次导航到活动,它总是崩溃第二次。我怎样才能确保这个线程每次都运行成功呢?

  • 我刚刚开始学习oAuth2授权来保护我的API。这个过程相当复杂。我的API是使用泽西和Apache Oltu作为oAuth2授权开发的。现在,可以生成令牌,但是,每次我尝试生成新令牌时,服务器都会创建一个@Application ationScoped bean的新实例。这是我从互联网上获得的bean代码: 这是授权代码: 如您所见,这里有数据库的@Inject注释,在代码的某些部分中调用了ad

  • 问题内容: 实际上,除了扩展Thread类和实现Runnable接口之外,还有哪些其他方法可用? 问题答案: 完全有一种方法可以在Java中创建一个新线程,并将其实例化(要真正 运行 该线程,您还需要调用)。 在Java代码中创建线程的所有其他内容都回到了幕后的这种方式(例如,实现将在某个时刻实例化对象,…)。 有两种不同的方法来 指定要 在该线程中 运行的代码 : 实现接口,并通过它实现的类的实

  • 问题内容: 当我运行以下代码时,两个测试用例都变为现实: 预期的行为 test1-成功 test2-失败(按预期该计数将变为3) 实际行为 test1-成功 test2-成功 为什么junit 与每个测试方法都调用。它是junit中的错误或有意提供。 问题答案: 每种测试方法的新实例 对于每种测试方法,将创建Junit的行为的 新实例。 因此,在您的情况下,这两种方法的变量都将具有value ,因

  • 我刚刚开始Spring Boot并设法在PostgreSQL数据库中创建表。然后,我将一个配置文件添加到我的项目中,该文件将把数据插入数据库。但是,据我所见,代码并没有命中这个配置文件并重新创建表。我试图更改文件中的参数,但这没有任何意义,结果,在运行空记录的每个应用程序上重新创建表(在Java控制台just create table上也可以看到)。那么,我错过了什么? 应用程序.属性: 学生配置

  • 我正在编写一个小应用程序,现在我发现了一个问题。我需要调用一个(稍后可能是两个)方法(这个方法加载一些东西并返回结果),而不会滞后于应用程序的窗口。 我找到了像Executor或Callable这样的类,但我不知道如何使用这些类。 你能张贴任何解决方案,这对我有帮助吗? 谢谢你的建议。 编辑:方法必须返回结果。此结果取决于参数。类似这样: 此方法大约工作8-10秒。执行此方法后,可以停止线程。但我