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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

10黑马币
如题:定义一个数组,开启两个线程,分别隔一段时间存入一个随机数,每个线程存满5个即可在论坛看到这个题,可能是自己学的还不够,求答案!!!

最佳答案

评分

参与人数 1技术分 +5 收起 理由
黑妞~ + 5 你懂的

查看全部评分

8 个回复

倒序浏览
  1. import java.util.Random;

  2. public class ShareArrThread {
  3.    /*
  4.    * 声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),
  5.    * 给数组中添加数据,每一个线程为数组添加3个数据即可。
  6.    */
  7.         public static void main(String[] args)
  8.         {
  9.                 final Arr arr = Arr.getArr();
  10.                 new Thread(
  11.                                 new Runnable()
  12.                                 {
  13.                                         public void run()
  14.                                         {
  15.                                                 for(int i = 0;i<3;i++)
  16.                                                         arr.addA();
  17.                                         }
  18.                                 }
  19.                                 ){}.start();
  20.                                 new Thread(
  21.                                                 new Runnable()
  22.                                                 {
  23.                                                         public void run()
  24.                                                         {
  25.                                                                 for(int i = 0;i<3;i++)
  26.                                                                         arr.addB();
  27.                                                         }
  28.                                                 }
  29.                                                 ){}.start();
  30.         }
  31. }
  32. class Arr
  33. {
  34.         private Arr()
  35.         {}
  36.         private static Arr a = null;
  37.         public static Arr getArr()
  38.         {
  39.                 if(a==null)
  40.                         synchronized(Arr.class)
  41.                         {
  42.                                 if(a==null)
  43.                                         a = new Arr();
  44.                         }
  45.                 return a;
  46.         }
  47.         int[] arr = new int[6];
  48.         int i = -1;
  49.         boolean flag = true;
  50.         public synchronized void addA()
  51.         {
  52.                 while(flag)
  53.                         try {
  54.                                 wait();
  55.                                 Thread.sleep(new Random().nextInt(2000));
  56.                         } catch (InterruptedException e) {
  57.                                 e.printStackTrace();
  58.                         }
  59.                 System.out.println(Thread.currentThread().getName()+"添加了"+(arr[++i]=new Random().nextInt(2000))+";");
  60.                 flag = !flag;
  61.                 notify();
  62.         }
  63.         public synchronized void addB ()
  64.         {
  65.                 while(!flag)
  66.                         try {
  67.                                 wait();
  68.                                 Thread.sleep(new Random().nextInt(2000));
  69.                         } catch (InterruptedException e) {
  70.                                 e.printStackTrace();
  71.                         }
  72.                 System.out.println(Thread.currentThread().getName()+"添加了"+(arr[++i]=new Random().nextInt(2000))+";");
  73.                 flag = !flag;
  74.                 notify();
  75.         }
  76. }
复制代码

评分

参与人数 1黑马币 +20 收起 理由
sk0806 + 20 飞哥,好样的!!!不用单例也行,看你也不.

查看全部评分

回复 使用道具 举报
额,,,金币不够多还是问题太简单了,,大神们,求解答
回复 使用道具 举报
需求不明确啊
回复 使用道具 举报

额,,论坛看到的这个问题
回复 使用道具 举报
sk0806 发表于 2014-10-31 14:28
额,,论坛看到的这个问题

能给个链接吗
回复 使用道具 举报
郑飞 高级黑马 2014-10-31 16:21:52
7#
不过这里好像可以不用单例 直接在main里new一个
如果用继承Thread类开线程就要用了
回复 使用道具 举报
  1. package com.itheima;

  2. import java.util.Arrays;
  3. import java.util.Random;

  4. public class Test6 {
  5.         public static void main(String[] args) {

  6.                 AddArray a = new AddArray();
  7.                 Thread t1 = new Thread(a);
  8.                 Thread t2 = new Thread(a);
  9.                 t1.start();
  10.                 t2.start();
  11.         }

  12. }

  13. class AddArray implements Runnable {
  14.         // 定义数组
  15.         private int[] arr = new int[10];
  16.         // 定义指针
  17.         private int pos = 0;

  18.         public void run() {
  19.                 // 每个线程添加五个数字
  20.                 for (int x = 0; x < 5; x++) {
  21.                         // 获得随机数
  22.                         int temp = new Random().nextInt();
  23.                         synchronized (arr) {
  24.                                 arr[pos] = temp;
  25.                                 pos++;
  26.                                 System.out.println(Thread.currentThread().getName()
  27.                                                 + "...添加了..." + temp);
  28.                                 System.out.println(Arrays.toString(arr));
  29.                         }
  30.                         try {
  31.                                 Thread.sleep(500);
  32.                         } catch (InterruptedException e) {
  33.                                 // TODO 自动生成的 catch 块
  34.                                 e.printStackTrace();
  35.                         }
  36.                 }
  37.         }

  38. }
复制代码
供楼主参考
回复 使用道具 举报
怎么开启两个线程啊,坤姐
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马