黑马程序员技术交流社区

标题: 有关多线程的问题,求大神指教 [打印本页]

作者: ajj1314    时间: 2016-6-18 23:55
标题: 有关多线程的问题,求大神指教
/**
         * 将1-10之间的数用两个线程交替输出,输出 格式为A线程打印1  B线程打印2,A线程打印3...
         */
        public static void main(String[] args) {
                final Printer p = new Printer();
               
                new Thread(){
               
                        public void run() {
                                while(true) {
                                        try {
                                                p.print1();
                                               
                                        } catch (Exception e) {
                                               
                                                e.printStackTrace();
                                        }
                                }
                        }
                }.start();
               
                new Thread(){
                       
                        public void run() {
                                while(true) {
                                        try {
                                                p.print2();
                                       
                                        } catch (Exception e) {
                                               
                                                e.printStackTrace();
                                        }
                                }
                        }
                }.start();

        }

}

class Printer {
        private int flag=1;
        private int num = 1;
       
        public void print1() throws Exception {
                while(true) {
                        synchronized (this) {
                                if(flag != 1) {
                                        this.wait();
                                }
                                if(num > 10) {
                                        break;
                                }
                                System.out.println("A线程打印" + num++);
                                flag = 2;
                                this.notify();
                        }
                }
        }
       
        public void print2() throws Exception {
                while(true) {
                        synchronized (this) {
                                if(flag != 2) {
                                        this.wait();
                                }
                                if(num > 10) {
                                        break;
                                }
                                System.out.println("B线程打印" + num++);
                                flag = 1;
                                this.notify();
                        }
                }
        }

为什么这样做出来,输出结果是正确的,但是程序没有终止,应该怎么让结果输入结束后程序终止
作者: 何亚辉    时间: 2016-6-20 21:25
因为你最后一个执行的线程遇到return之后就死亡了, 但是别的线程还在等待中,    处于阻塞状态,    但是并没死..
你应该在每一个线程遇到return前都把下一个预计要执行的线程唤醒,    这样程序才会终止,
作者: 644313561    时间: 2016-6-23 21:57
先收藏,后面慢慢看!
作者: gaojiangjian    时间: 2016-6-26 00:19
这个答案找了好久,牛逼
作者: zhoubinjian    时间: 2016-6-26 02:29
一楼说的差不多了,你在判断num里面加上唤醒对方的语句就o啦




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