A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
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;
}


最佳答案

查看完整内容

你应该将sleep加在main线程中,你现在加的sleep,只是让新创建的进程等待了,main方法依然会在数据加进去之前就执行完了

4 个回复

正序浏览
本帖最后由 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;
}
回复 使用道具 举报
想看他怎么走的 可以在for循环里面加一个输出语句随便打印个什么,就能看的到效果了
回复 使用道具 举报
主线程也是线程 都在执行 就在那个线程停的一秒的时间 你主线程已经遍历完了 但是你的随机数还没生成完
回复 使用道具 举报
你应该将sleep加在main线程中,你现在加的sleep,只是让新创建的进程等待了,main方法依然会在数据加进去之前就执行完了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马