我改了一下,可以确保list是最后修改的内容,但是无法确保list最后的值。代码如下: private static ArrayList<String> list = new ArrayList<String>(1); static { list.add("1"); } public static void main(String[] args) throws Exception { final CountDownLatch latch = new CountDownLatch(10); final Lock lock = new ReentrantLock();
private static ArrayList<String> list = new ArrayList<String>(1);
static {
list.add("1");
} public static void main(String[] args) throws Exception { final CountDownLatch latch = new CountDownLatch(10);
final Lock lock = new ReentrantLock();
for(int i=0;i<10;i++){
new Thread(){
public void run(){
try {
lock.lock();
list.set(0, this.getName());
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
} finally {
latch.countDown();
lock.unlock();
}
}
}.start();
}
//其他10个子线程用list.set(1,"xxxxx")这种方法修改list里的内容然后countdown
//这里等待子线程修改后打出list里面的内容
//请问这里能保证是最后修改后的list吗?
//list是否需要同步或用Vector才能保证?
latch.await();
System.out.println("last---"+list);