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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Tae丶Yeon

中级黑马

  • 黑马币:57

  • 帖子:80

  • 精华:0

© Tae丶Yeon 中级黑马   /  2014-12-9 22:04  /  672 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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的变量传入线程 为什么不能实现角标的共享?求高人解答 谢谢

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马