首先理解一个基本设计:
当一个方法使用不仅仅是在一个类,就需要考虑到一个很简单的设计。
如果涉及到多种变化,实现之前的差别很大,接口是一个非常好的选择,接口使用地好能极大程度上减少ifelse的使用。
如果各个组件之前完全平行,这个时候抽象出一个父类,也是很实用的,父类最大的优点在于,实现已经写好了,直接用就行(关键点就在于变与不变的比例到底有多少)。
比如以下代码:
AbstractStatementService
CustomerStatementService extends AbstractStatementService
CustomerMonthlyStatementService extends AbstractStatementService
BrokerStatementService extends AbstractStatementService
优点在于:
@Autowired
protected ThreadPoolTaskExecutor statementExecutorPool;
1.多个类的autowired只需要做一次(复制粘贴给爷si)
2.方法的重写,使得结构会更加清晰
网络编程 ThreadPoolTaskExecutor
使用方式:
statementExecutorPool.execute(() -> {
try {
} catch (Exception ex) {
e[0] = ex;
log.error("customer monthly statement [{}] error", businessDate, ex);
} finally {
latch.countDown();
}
}
注意这里的latch.countDown()
这里出现一段代码:这里实际上就是非常公式化的套用。
try {
latch.await();
} catch (InterruptedException ex) {
log.error("customer monthly statement : CountDownLatch error ", ex);
throw ex;
}
if(e[0] != null) {
throw e[0];
}
最后的总结就是,多线程的使用实际上门槛很低,出于畏惧心理往往使用很少。
使用起来不难,但是如果遇到问题了,该怎么去解决,也是非常头疼的,所以需要有技术过硬的大佬帮忙看着,同时自己也要总结经验,但不能不用。