黑马程序员技术交流社区

标题: 线程问题 [打印本页]

作者: Tae丶Yeon    时间: 2014-12-9 22:04
标题: 线程问题
  1. //main
  2. public class ThreadTest {
  3.         public static void main(String[] args) throws InterruptedException {
  4.                 //临界资源 共享数组
  5.                 int[] arr = new int[6];
  6.                 ArrIndex ai = new ArrIndex();
  7.                 Thread t1 = new Thread(new InputArr(arr, ai), "线程A");
  8.                 Thread t2 = new Thread(new InputArr(arr, ai), "线程B");
  9.                 t1.start();
  10.                 t2.start();
  11.                 t1.join();
  12.                 t2.join();

  13.         }
  14. }
  15. public class ArrIndex extends Thread {
  16.         //数组index
  17.         public int index;

  18. }

  19. import java.util.Random;

  20. public class InputArr implements Runnable {
  21.         private int[] arr;
  22.         private int count;
  23.         private ArrIndex ai;

  24.         InputArr(int[] arr, ArrIndex ai) {
  25.                 this.arr = arr;
  26.                 this.ai = ai;
  27.         }

  28.         @Override
  29.         public void run() {
  30.                 //每一个线程为数组添加3个数据即可
  31.                 while (count < 3) {
  32.                         //生成随机数
  33.                         int x = new Random().nextInt(5);
  34.                         synchronized (InputArr.class) {
  35.                                 try {
  36.                                         System.out.println(Thread.currentThread().getName() + "等待"
  37.                                                         + x + "秒");
  38.                                         //两个线程分别隔一段时间
  39.                                         Thread.sleep(x * 1000);
  40.                                 } catch (InterruptedException e) {
  41.                                         e.printStackTrace();
  42.                                 }
  43.                                 //给数组添加数据
  44.                                 arr[ai.index] = x;
  45.                                 System.out.println(Thread.currentThread().getName() + "添加数据:"
  46.                                                 + arr[ai.index]);
  47.                                 for (int i = 0; i < arr.length; i++) {
  48.                                         System.out.println(arr[i]);
  49.                                 }
  50.                                 count++;
  51.                                 ai.index++;
  52.                         }
  53.                 }
  54.         }

  55. }
复制代码


把ArrIndex类改变为在main函数定义一个基本数据类型int ptr=0的变量传入线程 为什么不能实现角标的共享?求高人解答 谢谢




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