日期:2014-05-19  浏览次数:20800 次

求助:EBJ与多线程
现在遇到了一个很棘手的问题,跪求各位大侠帮助!
现在我们的系统要做一个定时任务,简单来说就是数据拷贝。每隔五分钟这个定时任务启动,然后从容器中获得一个EJB对象(假设叫做EJBCopyDataJob),调用EJBCopyDataJob里面的一个startCopyDataJob方法,开始数据拷贝。由于涉及到业务处理,我们不能简单的只是拷贝数据,而是必须通过调用其他EJB对象的方法来实现数据拷贝。伪代码如下:
startCopyDataJob(){
  for(...){
  EJBBussinessBean bean=EJBContainer.getEJBBussinessBean();
  bean.bussinessLogic();
  }
}
由于现在是单线程处理,所以startCopyDataJob里面的循环只能一条一条的处理,速度很慢,现在想换成多线程的方式:
startCopyDataJob(){
  for(...){
  EJBBussinessBean bean=EJBContainer.getEJBBussinessBean();
  MyThread t=new MyThread(bean);
  t.start();
  }
}
现在自己按照上面的方式简单的尝试了一下,但是出现了很多错误,包括事务,连接池,死锁等等。
后来上网简单的搜索了一下,都说EJB好像是不支持多线程的。但是现在自己又找不到解决效率的方法。在此跪求各位大侠帮助,小弟感激不尽!

------解决方案--------------------
有一个任务调度开源框架 quartz 你们为什么不试一试这个呢。 

学习曲线不陡峭。 容易掌握的。
------解决方案--------------------
这个我倒是不理解了。 为什么一个大任务用了多线程以后就可以由原来的1个小时变成现在的半个小时呢。

我觉得多线程解决不了你的问题。 

你现在应该是在算法上下点功夫,看看怎么能够优化。