java executor spring_java – 使Spring bean的行为类似于ExecutorServi...

在我的Web应用程序中,我有一个后台服务.此服务使用包含Engine类的Generator类和配置为使用多个线程并接受GeneratorTasks的ExecutorService.

@Component

public class Generator {

@Autowired

private Engine heavyEngine;

private ExecutorService exec = Executors.newFixedThreadPool(3);

//I actually pass the singleton instance Generator class into the task.

public void submitTask(TaskModel model, TaskCallback callback) {

this.exec.submit(new GeneratorTask(model, this, callback));

}

}

@Component

public class Engine {

public Engine() {

//time-consuming initialization code here

}

}

public class GeneratorTask implements Callable {

public GeneratorTask(TaskModel m, Generator g, ReceiptCallback c) {

this.m = m;

this.generator = g;

this.c = c;

}

public String call() throws Exception {

//This actually calls the Engine class of the generator.

//Maybe I should have passed the Engine itself?

this.generator.runEngine(c);

}

}

Engine类需要很长时间才能初始化,所以理想情况下我希望每个线程只初始化一次.我不能只使它成为单例实例,因为实例不能跨多个线程共享(它依赖于顺序处理).在处理任务完成后,重用实例是完全可以的.

我正在考虑将私有Engine HeavyEngine变量作为ThreadLocal变量.但是,我也是Spring的新手,所以我想知道是否有其他方法可以使用Spring注释注入ThreadLocal变量.我已经看过确定bean的范围,但是我不确定如何根据我的设计去做.

任何关于如何改进我的设计的指导将不胜感激.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值