会不会是进程死锁了。原因是你的代码使用的某个资源把2003 server系统中某个关键进程需要用到的资源给占用了。然后,而你代码里需要的另一个资源又被这个关键进程已经占用,造成双方等待,进程死锁。

解决方案 »

  1.   

    程序在不停的执行下面的循环,从控制台可以看见每隔大概一秒就打印出try中字符串{{{{{{{{{{::   + out + "  ::}}}}}}}} while(!parallelFlag.isZero()){
    try{
    Thread.sleep(ServiceConstant.SLEEP_TIME);
                                    System.out.prinln("{{{{{{{{{{::  " + out + "  ::}}}}}}}}");
    }catch(Exception e){
    logger.info("sleep error::"+e+"");
    }
    }
      

  2.   

    windows下,XP和2003区别是不大的,又不是linux,你先确认下机器的环境是否正确安装吧?
    比如说JDK的版本,系统的JAVA环境变量,安装Tomcat的时候本地dll是否正确下载另外,贴出exeAllInstantService方法的代码看下?
      

  3.   

    !parallelFlag.isZero()<----是不是程序逻辑问题,按字面,这里的并行标识一直不为0.
      

  4.   


    也想xp和2003区别不大啊。但的确同样的程序放到2003上就拼命的吃cpu。以下是方法代码    public static String exeAllInstantService(String Key) {
    init();
    long start=System.currentTimeMillis();
    long tmp=0;
    final InstantItemList iil = new InstantItemList();
    final ParallelFlag parallelFlag=new ParallelFlag();
    InstantCondition ic=new InstantCondition(Key);
    iil.setMarkKey(ic);
    for (int i = 0; i < serviceInfoList.size(); i++) {
    ServiceInfo si = (ServiceInfo) serviceInfoList.get(i);
    if(logger.isInfoEnabled()){
    logger.info("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"+si.serviceName+" start  &&&&&&&&&&&&&&&&&&&&&&&&&");
    tmp = System.currentTimeMillis();
    }
    if (si.isInstantService()) {
    System.out.println("index1: " + parallelFlag.getCount());
    synchronized(parallelFlag){ 
    System.out.println("index2: " + parallelFlag.getCount());
    parallelFlag.increase();
    System.out.println("index3: " + parallelFlag.getCount());
    }
    Call call = ServiceOperator.getCall(si.serviceUrl,si.serviceName);
    AsyncCall ac = new AsyncCall(call, new IAsyncCallback() {
    public void onCompletion(IAsyncResult result) {
    System.out.println("Asy Call..");
                Status status = result.getStatus();
                if (status.COMPLETED == Status.COMPLETED ) {
                    String ret = (String) result.getResponse();
                    System.out.println("index4: " + parallelFlag.getCount());
                    synchronized(parallelFlag){
                     System.out.println("index5: " + parallelFlag.getCount());
                     parallelFlag.decrease();
                     System.out.println("index6: " + parallelFlag.getCount());
                    
                     if((!(ret.equalsIgnoreCase(ServiceConstant.CONST_ERROR_SERVICE))&&(ret.length()>1))){
    //                  logger.info("start instantItem:::::::::::::::::::::::::::::::::"+ret);
                     InstantItem iiTmp = new InstantItem(ret);
                     ServiceInfo si = ServiceInfoList.getServiceInfoByName(iiTmp.getLocalServiceName());
                     if(si.isHaveNextService)iiTmp.setServiceUrl(si.instantNextServiceUrl);
                     iil.addInstantItemByPri(iiTmp,si.pri);
    //                  logger.info("add one intantItem::"+ret);
                     }
                    }
                } else if (status == Status.EXCEPTION) {
                    result.getException().printStackTrace();
                }
    //            logger.info(".....FINISHED");             
            }
        });
    IAsyncResult result = ac.invoke(new Object[]{Key});
    }
    // if(logger.isInfoEnabled()){
    // logger.info("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"+si.serviceName+" has finished in "+(System.currentTimeMillis()-tmp));
    // }
    }
    while(!parallelFlag.isZero()){
    try{
    Thread.currentThread().sleep(ServiceConstant.SLEEP_TIME);
    // logger.info("has sleep for "+ServiceConstant.SLEEP_TIME);
    }catch(Exception e){
    logger.info("sleep error::"+e+"");
    }
    }
    String ret =iil.getXml();
    if(logger.isInfoEnabled()){
    logger.info("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& All instant Service has finished in "+(System.currentTimeMillis()-start));
    }
    return ret;
    }
      

  5.   

    xp,2003的配置怎样???Cpu Mom
      

  6.   


    cpu是intel至强四核,内存2G。