黑马程序员技术交流社区

标题: 练习 多线程操作数组 [打印本页]

作者: fmi110    时间: 2015-10-2 22:03
标题: 练习 多线程操作数组
a
  1. /**
  2. * 两个线程轮流给数组添加随机数
  3. */
  4. public class T23 {
  5.         private static int[] arr = new int[6];//共享的数据
  6.         private static int index = 0;//数组下表指针
  7.         private static boolean flag = false;
  8.         public static void main(String[] args) throws InterruptedException {
  9.                 final Object lock = new Object();
  10.                 new Thread() {
  11.                         public void run() {
  12.                                 synchronized (lock) {
  13.                                         while (index < 6) {//index指示,数组是否已经添加结束
  14.                                                 while (flag) {
  15.                                                         try {
  16.                                                                 lock.wait();
  17.                                                         } catch (InterruptedException e) {
  18.                                                                 e.printStackTrace();
  19.                                                         }
  20.                                                 }
  21.                                                 int num = (int) (Math.random() * 10 + 1);
  22.                                                 add1(num);
  23.                                                 flag = flag^true;//flag取反
  24.                                                 lock.notifyAll();
  25.                                         }
  26.                                 }
  27.                         };
  28.                 }.start();
  29.                 new Thread() {
  30.                         public void run() {
  31.                                 synchronized (lock) {
  32.                                         while (index < 6) {
  33.                                                 while (!flag) {
  34.                                                         try {
  35.                                                                 lock.wait();
  36.                                                         } catch (InterruptedException e) {
  37.                                                                 e.printStackTrace();
  38.                                                         }
  39.                                                 }
  40.                                                 int num = (int) (Math.random() * 10 + 1);
  41.                                                 add1(num);
  42.                                                 flag = false;
  43. //                                                flag = flag^true;
  44.                                                 lock.notifyAll();
  45.                                         }
  46.                                 }
  47.                         };
  48.                 }.start();
  49.                 while(index<6){
  50.                         Thread.sleep(1);
  51.                 }
  52.                 for(int i:arr)//遍历输出数组
  53.                         System.out.print(i+" ");
  54.         }
  55.         public static void add1(int i){
  56.                 if(index<6){
  57.                         arr[index] = i;//对共享数据进行操作需要进行同步
  58.                         System.out.println("arr["+index+"] = "+i
  59.                                         +"..."+Thread.currentThread().getName());
  60.                         index++;
  61.                 }
  62.         }
  63. }
复制代码
  1. arr[0] = 3...Thread-0
  2. arr[1] = 2...Thread-1
  3. arr[2] = 7...Thread-0
  4. arr[3] = 7...Thread-1
  5. arr[4] = 6...Thread-0
  6. arr[5] = 9...Thread-1
  7. 3 2 7 7 6 9
复制代码








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