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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LOVE你的ME 中级黑马   /  2014-11-28 22:56  /  1548 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 LOVE你的ME 于 2014-11-28 23:00 编辑

看到了有人面试后的帖子,看到了这个面试题,那个帖子下面的答案我也看不懂
声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),
    给数组中添加数据,每一个线程为数组添加3个数据即可。

由于我刚学到线程,试着做了一下(可能没理解清题意),我看着我做的感觉都不对,请大神们给看看我的代码符合题意吗?然后给一个正确的代码(简洁明了的那种,不要太难的方法哦!)
  1. package lianxibao2;

  2. import java.util.*;

  3. public class Demo01 {
  4.         public static void main(String[] args) {
  5.                 int[] arr = new int[6];
  6.                 new Thread(new add1(arr)).start();
  7.                 new Thread(new add1(arr)).start();
  8.                 System.out.println(Arrays.toString(arr));
  9.         }
  10. }

  11. class add1 implements Runnable {
  12.         private int[] arr;

  13.         add1(int[] arr) {
  14.                 this.arr = arr;
  15.         }

  16.         public void run() {
  17.                 for (int i = 0; i < arr.length; i++) {
  18.                         arr[i] = i;
  19.                 }
  20.         }
  21. }
复制代码
运行结果是:[0, 1, 2, 3, 4, 5]


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

13 个回复

倒序浏览
和我的一样。。。。。只不过方法不一样。。。你的约束呢?
回复 使用道具 举报
Rain2692 发表于 2014-11-28 23:27
和我的一样。。。。。只不过方法不一样。。。你的约束呢?

和你的一样?你面试过了吧!我还没有面试呢,我是看到别人发的面试题帖子,刚好学到了拿来做做,我想知道正确的答案。
回复 使用道具 举报
本帖最后由 马个了黑_邓 于 2014-11-29 10:18 编辑

楼主是不是这样。。。。代码有问题,谨慎使用:lol
  1. import java.util.Arrays;
  2. import java.util.Random;

  3. /*
  4. * 声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),
  5.     给数组中添加数据,每一个线程为数组添加3个数据即可
  6. */
  7. <blockquote>class myArray
复制代码
回复 使用道具 举报
马个了黑_邓 发表于 2014-11-29 09:54
楼主是不是这样。。。。代码有问题,谨慎使用

晕。。上面搞乱了  
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Random;

  4. /*
  5. * 声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),
  6.     给数组中添加数据,每一个线程为数组添加3个数据即可
  7. */
  8. class myArray
  9. {
  10.         private ArrayList<Integer> al = new ArrayList<Integer>(); //首先建立一个集合(原因长度可变)
  11.         int count = 0;
  12.         public void add(int i)
  13.         {
  14.                 synchronized(myArray.class)
  15.                 {
  16.                         try
  17.                         {
  18.                                 Thread.sleep(2000);
  19.                         }
  20.                         catch (Exception e)
  21.                         {
  22.                         }

  23.                         al.add(i);
  24.                         System.out.println(Thread.currentThread().getName()+"添加了"+i);
  25.                         count++;
  26.                 }
  27.                 Object[ ] obj = al.toArray();   //题目要求数组就装到数组里
  28.                 System.out.println(Arrays.toString(obj));
  29.         }
  30.        
  31. }
  32. class addIn implements Runnable
  33. {
  34.         private myArray my = new myArray();
  35.         public void run()
  36.         {
  37.                 for(int x =0;x<3;x++)
  38.                 {
  39.                         Random r = new Random();
  40.                         int index = r.nextInt(200);
  41.                         my.add(index);
  42.                 }
  43.         }
  44. }
  45. public class ThreadDemo {

  46.         /**
  47.          * @param args
  48.          */
  49.         public static void main(String[] args) {
  50.                 // TODO Auto-generated method stub

  51.                 addIn ad = new addIn();
  52.                 new Thread(ad).start();
  53.                 new Thread(ad).start();
  54.         }
  55. }
复制代码
,,重写发次

评分

参与人数 1技术分 +2 收起 理由
杨佳名 + 2 赞一个!

查看全部评分

回复 使用道具 举报 1 0
马个了黑_邓 发表于 2014-11-29 10:21
晕。。上面搞乱了   ,,重写发次

谢谢大神了,根据你的代码我弄清了题意。
回复 使用道具 举报
yibo924 中级黑马 2014-11-29 22:38:52
7#
我也来看看看,嘿嘿
回复 使用道具 举报
学习了  来看看
回复 使用道具 举报
马个了黑_邓 发表于 2014-11-29 10:21
晕。。上面搞乱了   ,,重写发次

这代码才全面嘛,楼主的代码感觉功能太简单了
回复 使用道具 举报
马个了黑_邓 发表于 2014-11-29 10:21
晕。。上面搞乱了   ,,重写发次

总感觉题意是睡眠随机数长度的时间...不过这个应该无所谓
这么一想确实应该写个集合,不会多几句代码..就体现了自己集合学的也不错..受教了,这是可贵的面试经验...
回复 使用道具 举报
学习学习
回复 使用道具 举报
这道题的目的是为了检测随机和Sleep的长度吗?已经学习了多线程,但是没看到这个知识点。学习了~~
回复 使用道具 举报
public class Test2
{
          public static void main(String[] args) throws Exception
      {
                T t=new T();
                Thread t1=new Thread(t,"线程1");
                Thread t2=new Thread(t,"线程2");
               
               
                for (int i = 0; i < 2; i++)
                {
                        if(i==0)
                        {
                                t1.start();
                                t1.join();
                        }else
                        {
                                t2.start();
                                t2.join();
                        }
                }
      
                for (int i = 0; i < T.arr.length; i++)
                {
                        System.out.println(T.arr[i]);
                }
      }
}
class T  implements Runnable
{
        public static  int []arr=new int[6];
        int count=0;
        public void run()
        {
               
                for (int i = 0; i < 3; i++)
                   {
                           try
                           {
                                Thread.sleep(1000);
                               
                       
                           } catch (Exception e)
                           {
                                e.printStackTrace();
                           }
                          arr[count]=(new Random().nextInt(100));
                          count++;
                         System.out.println( Thread.currentThread().getName());;
                   }
        }
       
       
       
}
回复 使用道具 举报
哇哇, 看来我要多学习下了 ~ 这些都不会 TAT
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马