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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

声明一个共享数组,起两个线程,两个线程分别隔一段时间(可以写一个随机数),给数组中添加数据,每一个线程为数组添加3个数据即可。

7 个回复

倒序浏览
点招 都这么难么,亚历山大有木有。。。
回复 使用道具 举报
暮雨微凉 发表于 2016-9-23 21:56
点招 都这么难么,亚历山大有木有。。。

点招比这个简单点吧
回复 使用道具 举报
貌似店招就是这种吧
回复 使用道具 举报
这么难?只是习题吧?
回复 使用道具 举报
1.重写run方法
2.定义共享资源
3.通过线程的名称判断执行的几次
4.满足条件就跳出
回复 使用道具 举报
最近我也凌乱了
回复 使用道具 举报
gcno93 中级黑马 2016-9-24 01:15:53
8#
/*思路
                 * 1.先创建一个线程类
                 * 2.在线程类中,申明一个共享数组
                 * 例如;private static int[] arr =new int[6]
                 * 3.因为我们需要记录数组下边,所以们还需在线程类中声明一个共享的数组下标变量
                 * ,用于记录数组当前的下标 例:private static int i = 0 ;
                 * 4.在线程类中声明随机数对象用于为数组产生值
                 * 5.在线程类中声明一个添加的次数的变量,进行计算3次后结束添加
                 * 6.在线程类中的run的方法里面写一个while循环,用来为共享数组赋值
                 * 具体看以下代码吧
                 */
//以下代码只是参考,这个题我也不知我是否理解对了,大家学习,学习
import java.util.Random;

public class Test2 {
        public static void main(String[] args) {
                /*
                 * 声明一个共享数组,起两个线程,
                 * 两个线程分别隔一段时间(可以写一个随机数),
                 * 给数组中添加数据,每一个线程为数组添加3个数据即可。
                 */
               
               
                //起两个线程
                new Thread(new xinCheng(),"线程1").start();
                new Thread(new xinCheng(),"线程2").start();
        }
}
class xinCheng implements Runnable{
        private static int[] arr =new int[6]; //声明一个共享数组
        private static int i = 0 ; //数组的下标游标
        private Random r = new Random();  //随机数对象
        //下面为什么不用共享,因为我们需要的是各自添加3次
        private int addTimes = 0; //达到3后让线程停止
        @Override       
        public void run() {
                while(true){
                        synchronized ("adasd") {
                                //给数组中添加数据
                                //System.out.println(i);
                                arr[i++]  = r.nextInt(100); //产生随机数为数组添加元素
                                addTimes++; //添加次数加1
                               
                                //下面只是输出而然
                                System.out.println(Thread.currentThread().getName()+":"+arr[i-1]);
                               
                               
                                if(addTimes == 3){//判断是否已经添加3次了
                                        break;
                                }
                               
                                try {
                                        //两个线程分别隔一段时间
                                        Thread.sleep(3000);
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                        }
                       
                }
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马