黑马程序员技术交流社区

标题: 谁帮忙看看为什么这个代码没有任何输出啊...??? [打印本页]

作者: LARK    时间: 2016-10-20 23:42
标题: 谁帮忙看看为什么这个代码没有任何输出啊...???
谁帮忙看看为什么这个代码没有任何输出啊...???
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]);
                        }
                }
        }
}
作者: 13902480061    时间: 2016-10-20 23:54
if(i % 3 == 0) 两个线程开头都是i=0,打印的结果也不是你要的,你把这个if里面打印下测试结果,是不是两个都相互等待了?我也不是很清楚。

作者: LARK    时间: 2016-10-21 00:56
13902480061 发表于 2016-10-20 23:54
if(i % 3 == 0) 两个线程开头都是i=0,打印的结果也不是你要的,你把这个if里面打印下测试结果,是不是两 ...

今天刚学有点绕,明天再慢慢理理思路

作者: Kevin_Ye    时间: 2016-10-21 00:57
多线程了啦,好快。虽然不懂,不过楼主加油。

作者: 蓝光四号    时间: 2016-10-21 07:49
还没学,,,

作者: IceLoveInFire丶    时间: 2016-10-21 10:00
LARK 发表于 2016-10-21 00:56
今天刚学有点绕,明天再慢慢理理思路

你arr的长度永远是12,所以每次第一个条件不就break了吗

作者: LARK    时间: 2016-10-21 13:30
IceLoveInFire丶 发表于 2016-10-21 10:00
你arr的长度永远是12,所以每次第一个条件不就break了吗

(⊙o⊙)哦(⊙o⊙)哦,是啊,明白了,谢谢提点

作者: IceLoveInFire丶    时间: 2016-10-21 19:23
LARK 发表于 2016-10-21 13:30
(⊙o⊙)哦(⊙o⊙)哦,是啊,明白了,谢谢提点

..这种问题就是你不细心的问题
作者: 2756898282    时间: 2016-10-21 21:12
1,
你后面的代码有yield();
你可以在
t1.start() ;
t2.start();
后面加上
t1.join();
t2.join();

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

2,
至于
if(arr.length >= 12){
                                break;
                        }
无非就是让while(true) 结束, 可以设置一个 flag 来结束
作者: lyj1989    时间: 2016-10-21 21:38
好难啊 看了一个月基础视频表示不懂




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