黑马程序员技术交流社区

标题: 声明一个共享数组,起两个线程,两个线程分别隔一段时... [打印本页]

作者: 18573626921    时间: 2016-5-18 17:33
标题: 声明一个共享数组,起两个线程,两个线程分别隔一段时...
public class Test18 {

        /**为什么一加上Sleep就给老子输出全是零了。。。
         * 声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),给数组中添加数据,每一个线程为数组添加3个数据即可。
         * @param args
         */
        public static void main(String[] args) {
               
                  final Random r= new Random();
                  final int []arr =new int[6];
                  new Thread(){
                          public void run(){
                                  
                               
                                for(int i=0;i<3;i++){
                                        arr[Index.index++]=r.nextInt(100);
                                }
                          }
                  }.start();
                  new Thread(){
                          public void run(){
                                  
                                 try {
                                        Thread.sleep(1000);
                                               
                                       
                                        for(int i=0;i<3;i++){
                                                arr[Index.index++]=r.nextInt(100);
                                        }
                                } catch (InterruptedException e) {
                                       
                                        e.printStackTrace();
                                }
                          }
                  }.start();
                  for (int i : arr) {
                        System.out.println(i);
                }
        }

}
class Index{
        public static int index=0;
}



作者: 龙翔java    时间: 2016-5-18 17:33
你应该将sleep加在main线程中,你现在加的sleep,只是让新创建的进程等待了,main方法依然会在数据加进去之前就执行完了
作者: jing201314z    时间: 2016-5-19 23:49
主线程也是线程 都在执行 就在那个线程停的一秒的时间 你主线程已经遍历完了 但是你的随机数还没生成完
作者: jing201314z    时间: 2016-5-20 00:08
想看他怎么走的 可以在for循环里面加一个输出语句随便打印个什么,就能看的到效果了
作者: liming1990422    时间: 2016-5-25 00:10
本帖最后由 liming1990422 于 2016-5-25 00:17 编辑

public static void main(String[] args) {
        // TODO Auto-generated method stub

          final Random r= new Random();
          final int []arr =new int[6];
          new Thread(){
                  public void run(){
                          
                      try {
                        Thread.sleep(10);
                        for(int i=0;i<3;i++){
                            arr[Index.index++]=r.nextInt(100);
                        }
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                  }
          }.start();
          new Thread(){
                  public void run(){
                         try {
                                Thread.sleep(10);                     
                                for(int i=0;i<3;i++){
                                     arr[Index.index++]=r.nextInt(100);    //  arr[Index.index++]=r.nextInt(100);
                                }
                       } catch (InterruptedException e) {
                              
                               e.printStackTrace();
                        }
                  }
          }.start();
          try {
            Thread.sleep(1000);
            for (int i : arr) {                    //当线程1睡眠时主线程已经执行完毕   所以打印出来的是初始值
                System.out.print(i+"  ");
            }
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

}
class Index{
public static int index=0;
}




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