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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package cn.cast.day13;

public class DatebaseDemo {
        public void main(String[] args) {
                Database db = new Database();
                new DBA(db).start();
                new Developer(db).start();
        }
}

class Database {
        String name;
        String gender;
        boolean isUpdate;
}

class DBA extends Thread {
        private Database db;
        private int times;

        public DBA(Database db) {
                this.db = db;
        }
       
       
        public void run() {
                while(true)
                        synchronized(db) {
                                if(db.isUpdate)
                                        try {
                                                db.wait();
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                if(times++ % 2 == 0) {       
                                        db.name = "宗";
                                        db.gender = "男";
                                }else if(times++ % 2 == 1) {
                                        db.name = "宋";
                                        db.gender = "女";
                                }
                                        db.isUpdate = true;
                                        db.notify();
                        }
        }
}

class Developer extends Thread {
        private Database db;
       
        public Developer(Database db) {
                this.db = db;
        }
       
        public void run() {
                while(true)
                        synchronized(db) {
                                if(db.isUpdate)
                                        try {
                                                db.wait();
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                        System.out.println(db.name + db.gender);
                                db.isUpdate = false;
                                db.notify();
                        }
        }
}

2 个回复

倒序浏览
package cn.cast.day13;

public class DatebaseDemo {
        public void main(String[] args) {  //主方法中少了static关键字
                Database db = new Database();
                new DBA(db).start();
                new Developer(db).start();
        }
}

class Database {
        String name;
        String gender;
        boolean isUpdate;
}

class DBA extends Thread {
        private Database db;
        private int times;

        public DBA(Database db) {
                this.db = db;
        }
        
        
        public void run() {
                while(true)
                        synchronized(db) {
                                if(db.isUpdate)
                                        try {
                                                db.wait();
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                if(times++ % 2 == 0) {        
                                        db.name = "宗";
                                        db.gender = "男";
                                }else if(times++ % 2 == 1) {    //这里的判断有误,应用else语句,直接用else就可以。
                                        db.name = "宋";
                                        db.gender = "女";
                                }
                                        db.isUpdate = true;
                                        db.notify();
                        }
        }
}

class Developer extends Thread {
        private Database db;
        
        public Developer(Database db) {
                this.db = db;
        }
        
        public void run() {
                while(true)
                        synchronized(db) {
                                if(db.isUpdate) //这里条件错误,改成 if(!db.isUpdate)
                                        try {
                                                db.wait();
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                        System.out.println(db.name + db.gender);
                                db.isUpdate = false;
                                db.notify();
                        }
        }
}
回复 使用道具 举报
首先是mian方法里面上少了一个关键字static,这样的话类加载的时候不会运行mian方法,还有就是你的Developer 类中的run方法中的  if(db.isUpdate)这个判断条件不正确,应该是
if(!db.isUpdate) ,还有就是你的DBA类中的第二个if方法也不对,如果你用if    else  if       的话它默认的后面还有一个else 只要上面两个人以执行了一个那么你的       db.isUpdate = false;
db.notify();就会执行不到,就不能改变isUpdate的值了也不能唤醒DBA了
                                                                 
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马