黑马程序员技术交流社区

标题: 一个多线程问题 [打印本页]

作者: 马嘉    时间: 2014-10-26 09:59
标题: 一个多线程问题
这个代码的目的是:开启两个线程,隔一段时间就对数组添加数据

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class ArrayDemo {
        //共享的一个数组
        public static ArrayList<Integer> arr=new ArrayList<Integer>();
       
        public static void main(String[] arge) throws InterruptedException{
                //创建一个runnable匿名对象
                Runnable  thre=new Runnable() {
                        public void run() {
                                //不设置锁
        //                 synchronized(this){
                                for(int x=0;x<3;x++){
                                        //获取随机的数存入集合内
                                        Random  r=new Random();
                                        int y=r.nextInt(10);
                                        System.out.println(y);
                                        arr.add(y);
                                        System.out.println(Thread.currentThread().getName());
                                        try {
                                                //睡3秒
                                                        Thread.sleep(3000);
                                        } catch (InterruptedException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                }
                         }
                       
                };
                Thread t=new Thread(thre);
        //        t.setName("majia");
                t.start();
                Thread t1=new Thread(thre);
                t1.start();
                //主线程等待着两个线程执行完毕后,在执行
                        t.join();
                        t1.join();
                System.out.println(arr);
        }
                       
}


问题来了,为什么,经常会出现,数组0角标位置为null,没有添加数据,求大神解答

作者: 郑飞    时间: 2014-10-26 11:38
ArrayList不同步 可能和这个有关
作者: 郑飞    时间: 2014-10-26 11:40
不过我试了好多次 都没出现null啊
作者: 马嘉    时间: 2014-10-26 12:16
郑飞 发表于 2014-10-26 11:40
不过我试了好多次 都没出现null啊

我后来加了同步,如果用sleep,还是会出现空值。如果用wait就不会出现null值得现象,现在弄得我很是郁闷,还是的谢谢你了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2