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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

guaiyuanguai

初级黑马

  • 黑马币:17

  • 帖子:5

  • 精华:0

© guaiyuanguai 初级黑马   /  2016-8-25 21:43  /  348 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package 练习;

class Resource {
        private String name;
        private String sex;
        private boolean flag = false;

        public synchronized void set(String name, String sex) {
                if (flag)
                        try {
                                wait();
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                // 设置成员变量
                this.name = name;
                this.sex = sex;
                // 设置之后,Resource中有值,将标记该为 true ,
                flag = true;
                // 唤醒output
                this.notify();
        }
       

        public synchronized void out() {
                if (!flag)
                        try {
                                wait();
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                // 输出线程将数据输出
                System.out.println("姓名: " + name + ",性别: " + sex);
                // 改变标记,以便输入线程输入数据
                flag = false;
                // 唤醒input,进行数据输入
                this.notify();
        }
}

//输入线程任务类
class Input implements Runnable {
        private Resource r;

        public Input(Resource r) {
                this.r = r;
        }

        @Override
        public void run() {
                int count = 0;
                while (true) {
                        if (count == 0) {
                                r.set("小明", "男生");
                        } else {
                                r.set("小花", "女生");
                        }
                        // 在两个数据之间进行切换
                        count = (count + 1) % 2;
                }
        }
}

//输出线程任务类
class Output implements Runnable {
        private Resource r;

        public Output(Resource r) {
                this.r = r;
        }

        @Override
        public void run() {
                while (true) {
                        r.out();
                }
        }
}

//测试类i
public class TT {
        public static void main(String[] args) {
                // 资源对象
                Resource r = new Resource();
                // 任务对象
                Input in = new Input(r);
                Output out = new Output(r);
                // 线程对象
                Thread t1 = new Thread(in);
                Thread t2 = new Thread(out);
                // 开启线程
                t1.start();
                t2.start();
        }
}
以上代码如何理解呀, 不懂,自学的老师还没有讲到!

0 个回复

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