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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


public class Res {
        private String name;
        private String sex;
        boolean flag=true;//用来判断加载时是否有值
       
        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public String getSex() {
                return sex;
        }

        public void setSex(String sex) {
                this.sex = sex;
        }

        public boolean isFlag() {
                return flag;
        }

        public void setFlag(boolean flag) {
                this.flag = flag;
        }


        public synchronized void set(String name,String sex){
                if(flag){
                        try{this.wait();}catch(Exception e){System.out.println(e.getMessage());}
                        this.name=name;
                        this.sex=sex;
                        flag=false;
                        this.notify();
                }
        }
       
        public synchronized void Out()
        {
                if(!flag){
                        try{this.wait();}catch(Exception e){System.out.println(e.getMessage());}
                        System.out.println(name+".............."+sex);
                        flag=true;
                        this.notify();
                }
        }
}


//资源输入类
public class input implements Runnable {

        //初始化资源类
        private Res r;
        public input(Res r)
        {
                this.r=r;
        }

        @Override
       
               
        public void run() {
                int x=0;
                while(true){
               
                if(x==0)
                        r.set("张三", "男");
                else
                        r.set("李四","女");
               
                        x=(x+1)%2;
                }
        }

}


//资源输出类
public class out implements Runnable {
       
        private Res r;
        public out(Res r)
        {
                this.r=r;
        }
        @Override
        public void run() {
                // 循环调用资源类输出方法
                while(true){
                r.Out();
                }
        }
       
}

public class OutInputDemo {

        /**
         *创建线程,时间Runnable接口
         *使用同一个资源进行输入输出工作
         *思路:
         *1.定义资源类res
         *2.里面有name和sex两个属性和一个out输出方法
         *3.创建实现Runnable接口类input(输入类)初始化资源类同步代码
         *4.创建实现Runnable接口类Out(输出类)调用资源类Out方法
         *使用wati()等待和notify()唤醒机制实现输入输出切换功能
         */
        public static void main(String[] args) {
                //实例化资源类创建线程
                Res r=new Res();
                new Thread(new input(r)).start();
                new Thread(new out(r)).start();
               
        }

}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 楼主下次把问题标题明确点、还有排版哈~~.

查看全部评分

4 个回复

倒序浏览
我觉得你这个应该使用一个单例模式来返回class Res这个对象
回复 使用道具 举报
不太明白:(
回复 使用道具 举报
没图哦。。。。。
回复 使用道具 举报
不知道你是怎么跑的。 有没有把几个类分开成几个文件。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马