黑马程序员技术交流社区

标题: 求大神指教,使用MyExclipse写的多线程代码不知道怎么运行不起来 [打印本页]

作者: 天空之城°    时间: 2014-4-14 11:44
标题: 求大神指教,使用MyExclipse写的多线程代码不知道怎么运行不起来

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();
               
        }

}

作者: Kelvinhu    时间: 2014-4-14 12:00
我觉得你这个应该使用一个单例模式来返回class Res这个对象
作者: 天空之城°    时间: 2014-4-14 12:06
不太明白:(
作者: 轻语。    时间: 2014-4-14 12:26
没图哦。。。。。
作者: 轻语。    时间: 2014-4-14 12:29
不知道你是怎么跑的。 有没有把几个类分开成几个文件。




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