我在 仓库系统中 创建出库单时 现在主线程中创建出库单和出库单详情,然后利用多线程来给出库单分配库存,结果在执行 多线程的 run 方法时 StockOut 和 StockOutItem 在数据库中还没有插入完成。获取到的值为 null,有没有办法让多线程在主线程执行完插入出库单和出库单详情后再执行啊?// 创建出库单
@Transactional(rollbackFor = Exception.class)
public boolean insert(Long userId, StockOut entity, List<StockOutItem> stockOutItemList) {
Date currentTime = new Date();
boolean result = retBool(baseMapper.insert(entity));
for (StockOutItem stockOutItem : stockOutItemList) {
stockOutItem.setStockOutId(entity.getId());
stockOutItem.setQualityGrade(1);
stockOutItem.setCreater(userId);
stockOutItem.setCreateTime(currentTime);
stockOutItem.setEnable(true);
result = retBool(stockOutItemMapper.insert(stockOutItem));
}
ThreadUtils.distributionInventory(entity.getId(), userId); // 执行多线程 分配库存
return result;
}public class ThreadUtils {
public static void distributionInventory(Long stockOutId, Long modifier) {
ThreadPoolExecutor threadPool = ThreadPoolUtil.getThreadPool(); //获取线程池
threadPool.execute(new DistributionThread(stockOutId, modifier));
}
}
public class DistributionThread implements Runnable {
public void run(){
// 执行方法用到上面生成的 StockOut 和 StockOutItem
}
}
@Transactional(rollbackFor = Exception.class)
public boolean insert(Long userId, StockOut entity, List<StockOutItem> stockOutItemList) {
Date currentTime = new Date();
boolean result = retBool(baseMapper.insert(entity));
for (StockOutItem stockOutItem : stockOutItemList) {
stockOutItem.setStockOutId(entity.getId());
stockOutItem.setQualityGrade(1);
stockOutItem.setCreater(userId);
stockOutItem.setCreateTime(currentTime);
stockOutItem.setEnable(true);
result = retBool(stockOutItemMapper.insert(stockOutItem));
}
ThreadUtils.distributionInventory(entity.getId(), userId); // 执行多线程 分配库存
return result;
}public class ThreadUtils {
public static void distributionInventory(Long stockOutId, Long modifier) {
ThreadPoolExecutor threadPool = ThreadPoolUtil.getThreadPool(); //获取线程池
threadPool.execute(new DistributionThread(stockOutId, modifier));
}
}
public class DistributionThread implements Runnable {
public void run(){
// 执行方法用到上面生成的 StockOut 和 StockOutItem
}
}
解决方案 »
- 关于 新闻发布系统。。。。。。。。。。。。
- 为什么我刚装的MyEclipse7.5Web项目下面能创建HTML和JSP文档,但打不开啊?
- Ext扩展组件添加事件......熟悉ext的帮下忙.
- 页面如何动态刷新数据<和数据库关联的>
- 有关排版的问题,十万火急!!!!!帮帮我,在线等!!
- 不使用iframe搭建页面的问题
- 请教JSP中 hidden传值问题....
- 关于TOMCAT的问题,大虾和虾米们都进来看看呀.
- 网页链接打开问题
- servlet中输入输出流关闭问题
- mybatis使用xml写sql影响性能问题
- IDEA maven创建的web工程,pom.xml中配置的tomcat插件右侧maven栏刷新不到
子线程执行具体代码前检查能否获取到主线程插入的数据,如果未获取到则子线程调用A.sleep
主线程插入完成后,调用A.notify
在主线程执行插入之后再obj.notify(),这样应该就可以了吧