日期:2014-05-18  浏览次数:20723 次

多线程异步执行问题
在我的项目的applicationContext.xml配置文件中有如下配置:
<bean id="AsynService" class="com.strongit.nj.zdjr.common.asyn4j.spring.AsynServiceFactoryBean">
    <!--设置自定义相关参数-->
    <property name="maxCacheWork" value="10000"></property><!--最大工作队列缓存工作数-->
<property name="addWorkWaitTime" value="2000"></property><!--当工作队列满时添加工作等待时间-->
<property name="workThreadNum" value="50"></property><!--异步工作执行线程池大小 -->
<property name="callbackThreadNum" value="100"></property><!--回调执行线程池大小-->
<property name="closeServiceWaitTime" value="2000"></property><!--服务关闭等待时间-->
<!--添加相关处理器-->
<property name="errorAsynWorkHandler"><!-- 异步工作执行异常处理器 -->
<bean class="com.strongit.nj.zdjr.common.asyn4j.core.handler.DefaultErrorAsynWorkHandler"/>
    </property>
<property name="workQueueFullHandler"><!--异步工作缓冲处理器 -->
<bean class="com.strongit.nj.zdjr.common.asyn4j.core.handler.CacheAsynWorkHandler"/>
   </property>
   <property name="asynServiceCloseHandler"><!--服务器启动和关闭处理器  -->
            <bean class="com.strongit.nj.zdjr.common.asyn4j.core.handler.FileAsynServiceHandler"/>
       </property>
   </bean>

这是java提供的异步方法调用的相关配置,回调类TargetBack是这样的:

public class TargetBack extends AsynCallBack {
private static final Logger logger = Logger.getLogger(TargetBack.class);
private static final long serialVersionUID = -7226571806577095229L;

private JSONArray dcArray;

public TargetBack(JSONArray dcArray) {
this.dcArray= dcArray;
}

@Override
    public void doNotify() {
   Boolean result = (Boolean) methodResult;
      if (result) {
   for(int j = 0; j < dcArray.size(); j++) {
   jsonObject = dcArray.getJSONObject(j);
   dcxtHelper.savedcxt(jsonObject.getString("dcName"));   
         }
  }
  }
}


我的疑问是配置文件中callbackThreadNum配置,对回调类中的doNotify方法执行起到什么作用呢?(我猜测开了很多线程所以能快速处理循环,但是问题是,每个线程都做这个循环方法?又说不通)
有知道的大神们给小弟讲解下, 知道多少讲多少,小弟不胜感激啊!--疑惑很久了,等待你们的解答!

------解决方案--------------------
这个问题提的很好,楼主猜测的