本帖最后由 czuopeng 于 2011-04-26 17:03:47 编辑

解决方案 »

  1.   

    初步判断是
     public int getRetryCount() 加上synchronized 另外, 对于retryCount变量不要直接使用,请改成getRetryCount()   /**
             * 是否可以重试
             */
            public boolean canRetry() {
                int currentRetryCount = retryCount + 1;  //例如此处
                if (currentRetryCount <= maxRetryCount) {
                    retryCount = currentRetryCount;
                    return true;
                }
                return false;
            }
      

  2.   

    可以说下原因吗?同步对retryCount的访问?可是int类型原子的呀?如果说要同步,也应该同步canRetry方法吧?按你说的修改了下:执行结果:
    Thread-0 - --------start---------
    pool-1-thread-1 - test_1
    pool-1-thread-1 - error:0
    pool-1-thread-2 - test_1
    pool-1-thread-2 - error:1
    Thread-0 - while condition:true
    Thread-0 - --------end---------  在DEMO代码,对应队列中的同一个消息,同时只会有一个线程处理,所以对于同一个Message实例不会存在并发访问的情况。  其实奇怪在“Thread-0 - while condition:true”,这个地方,这个是在while退出后打印出来的,本来此处应该输入“while condition:false”的,因为此时循环退出了,循环条件应该时不满足。
      

  3.   

    帮你在WINDOW上测试了好几次,结果和你预期的一样。
    建议搜索Linux系统上多线程与WINDOW的区别。
      

  4.   

    我用myeclipse执行的。没出现错。
      

  5.   

    UP下,继续呼唤牛中
    这个问题貌似只会出现在LINUX中。