日期:2014-05-20  浏览次数:20774 次

问个关于List的多线程问题
对多线程会用一点,但好多都不是太清楚
我想实现下面的一个简单功能:
      创建一个类,里面有一个静态的ArrayList,在run中往里面添加元素,再删除掉。
      在一个主线程中创建这个类的多个实例,最后要求ArrayList是空的
      我自己写了一个,可是都是出错的,不知道该怎么办。
      下面是自己写的代码
----------------------------------
import   java.util.*;
import   java.util.concurrent.*;


class   ListTest   implements   Runnable{

public   static   int   counter=0;
public   final   int   id=counter++;
int   innerCount=0;
static   List <String>   list=Collections.synchronizedList(new   ArrayList <String> ());

public   void   run(){

synchronized(ListTest.class){
list.add(toString());
System.out.println(list.get(0));
list.remove(toString());
}

}

public   String   toString(){
return   "Task   "+id+ ":   "+(innerCount++);
}
}


public   class   SynchronizedCollection   {

/**
  *   @param   args
  *   @throws   Exception  
  */
public   static   void   main(String[]   args)   throws   Exception   {


ExecutorService   exec=Executors.newCachedThreadPool();
for(int   i=0;i <10;i++)
exec.execute(new   ListTest());
exec.shutdownNow();

System.out.println( "============================== ");

for(String   s:ListTest.list)
System.out.println(s);

}

}

------解决方案--------------------
换vector试一试
------解决方案--------------------
同意ls,vector是线程安全的,换下试试吧