程序代码如下:
public class test1 implements Runnable{
  private List list=ArrayList();
  public test1(){};
  
  public void add(String file){
    list.add(file);
  }  public void run(){
    try{
      while(true){
        if(list.size()>0){
          System.out.println((String)list.remove(0));
        }
        Thread.currentThread().sleep(10);
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
}
上面的线程在运行了几天后就听了,add了以后,run就好像停止了,程序也没有出现异常。我问问,这是怎么回事?大家有没有遇到过这种问题?

解决方案 »

  1.   

    问题可能出在ArrayList上,ArrayList需要在外部声明同步,而你的add()方法,和线程中的list.size()没有同步。
      

  2.   

    说一下你的运行环境,以及调用add(String)的线程的情况。
      

  3.   

    我运行的在windows 2000 sp 4,jdk 1.4
    我在运行线程的时候是一步一步打印出来的,发现add后,应该符合下面list.size()>0的条件,但是就是不执行,所以我怀疑run停止了。都是在第三天出现这种情况。
    绝对没有出现异常,因为我所有调用或线程本身我都打出异常。
      

  4.   

    你的add()是怎么执行的?由谁执行的?
      

  5.   

    Map tetsMap = new HashMap();
    -------------------------------------test1 tt1= new test1();
    new Thread(tt1).start();testMap.put("1",tt1);通过testMap获取,然后调用add方法的。
      

  6.   

    可能是我问的不清楚。按照你的说法,操作testMap的线程每间隔多长时间调用一次add(String),或者说,什么情况使得该线程调用tt1.add(String)?我做了一个针对test1的测试,看不出有什么问题,所以,是不是线程之间有冲突?
      

  7.   

    我插入的是一个get,set类
    算了,我再继续找吧!结贴了