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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在看毕老师的Java基础视频,看到多线程这块,看完视频后自己敲代码,编译通过,运行的时候抛空指针,对照毕老师的源码一句句对照,除了类名和函数名略有不同之外,没有找到其他不同,百撕不得骑姐,求助大神指点。

我自己敲的
class Person
{
        private String name;
        private String sex;
        private boolean flag=false;
        public synchronized void set(String name,String sex)
        {
               
                        if(flag)
                                try
                                {
                                        this.wait();
                                }
                                catch (InterruptedException e)
                                {
                                }
                this.name=name;
                this.sex=sex;
                flag=true;
                this.notify();
        }
        public synchronized void get()
        {
               
                        if(!flag)
                                try
                                {
                                        this.wait();
                                }
                                catch (InterruptedException e)
                                {
                                }
                        System.out.println(name+"..........."+sex);
                        flag=false;
                        notify();
        }

}
class Input implements Runnable
{
        Person p;
        Input(Person p)
        {
                this.p=p;
        }
        public void run()
        {
                int x=0;
                while(true)
                {
                        if(x==0)
                        {
                                p.set("张三","男");
                        }
                        else
                        {
                                p.set("lily","women");
                        }
                        x=(x+1)%2;
                }
        }
}
class Output implements Runnable
{
        Person p;
        Output(Person P)
        {
                this.p=p;
        }
        public void run()
        {
                while(true)
                {
                p.get();//74行报错。
                }
        }
}

class Wait
{
        public static void main(String[] args)
        {
                Person p=new Person();
                Input a=new Input(p);
                Output b=new Output(p);
                Thread t1=new Thread(a);
                Thread t2=new Thread(b);
                t1.start();
                t2.start();
        }
}


错误代码
Exception inthread "Thread-1" java.lang.NullPointerException
at Output.run(Wait.java:74)
at java.lang.Thread.run(Thread.java:744)
毕老师的


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

        public synchronized void set(String name,String sex)
        {
                if(flag)
                        try{this.wait();}catch(InterruptedException e){}
                this.name = name;
                this.sex = sex;
                flag = true;
                this.notify();
        }

        public synchronized void out()
        {
                if(!flag)
                        try{this.wait();}catch(InterruptedException e){}
                System.out.println(name+"...+...."+sex);
                flag = false;
                notify();
        }
}


//输入
class Input implements Runnable
{
        Resource r ;
//        Object obj = new Object();
        Input(Resource r)
        {
                this.r = r;
        }
        public void run()
        {
                int x = 0;
                while(true)
                {
                        if(x==0)
                        {
                                r.set("mike","nan");
                        }
                        else
                        {
                                r.set("丽丽","女女女女女女");
                        }
                        x = (x+1)%2;
                }
        }
}
//输出
class Output implements Runnable
{

        Resource r;
//        Object obj = new Object();
        Output(Resource r)
        {
                this.r = r;
        }

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



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




4 个回复

倒序浏览
470620844 来自手机 中级黑马 2016-7-27 23:26:07
沙发
这个点没人了吗?明天起来再说{:3_50:}
回复 使用道具 举报
{
        Person p;
        Output(Person P)
        {
                this.p=p;
        }
        public void run()
        {
                while(true)
                {
                p.get();//74行报错。
                }
        }
}






  Output(Person P)
这个地方的P大写了~~~给点奖励啊~~~
回复 使用道具 举报
确实是大写啦{:2_34:}
回复 使用道具 举报
qetu001212 发表于 2016-7-27 23:43
{
        Person p;
        Output(Person P)

确实是这,看来检查的还是不够仔细啊。。。。。
多谢帮助,昨天困扰了我一个晚上。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马