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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

谁帮忙看看为什么这个代码没有任何输出啊...???
public class HomeWork9 {
        public static void main(String[] args) {
                AddData ad = new AddData();
                Thread t1 = new Thread(ad);
                Thread t2 = new Thread(ad);
                t1.setName("线程1");
                t2.setName("线程2");
                t1.start();
                t2.start();
        }
}
class AddData implements Runnable{
        private int[] arr = new int[12];
        @Override
        public void run() {
                while(true){
                        if(arr.length >= 12){
                                break;
                        }
                        for (int i = 0; i < 12; i++) {
                                if(i % 3 == 0){
                                        Thread.yield();
                                }
                                arr[i] = (int)(Math.random()*100);
                                System.out.println(Thread.currentThread().getName() + "..." + arr[i]);
                        }
                }
        }
}

9 个回复

倒序浏览
if(i % 3 == 0) 两个线程开头都是i=0,打印的结果也不是你要的,你把这个if里面打印下测试结果,是不是两个都相互等待了?我也不是很清楚。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
13902480061 发表于 2016-10-20 23:54
if(i % 3 == 0) 两个线程开头都是i=0,打印的结果也不是你要的,你把这个if里面打印下测试结果,是不是两 ...

今天刚学有点绕,明天再慢慢理理思路
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
多线程了啦,好快。虽然不懂,不过楼主加油。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
LARK 发表于 2016-10-21 00:56
今天刚学有点绕,明天再慢慢理理思路

你arr的长度永远是12,所以每次第一个条件不就break了吗
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
LARK 中级黑马 2016-10-21 13:30:21
7#
IceLoveInFire丶 发表于 2016-10-21 10:00
你arr的长度永远是12,所以每次第一个条件不就break了吗

(⊙o⊙)哦(⊙o⊙)哦,是啊,明白了,谢谢提点
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
LARK 发表于 2016-10-21 13:30
(⊙o⊙)哦(⊙o⊙)哦,是啊,明白了,谢谢提点

..这种问题就是你不细心的问题
回复 使用道具 举报
1,
你后面的代码有yield();
你可以在
t1.start() ;
t2.start();
后面加上
t1.join();
t2.join();

然后while(true){    里面加同步锁 this  }
保证线程同步与安全

2,
至于
if(arr.length >= 12){
                                break;
                        }
无非就是让while(true) 结束, 可以设置一个 flag 来结束
回复 使用道具 举报
好难啊 看了一个月基础视频表示不懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马