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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北冥有鱼 中级黑马   /  2014-2-20 13:59  /  783 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


class  ThreadTest2
{
        public static void main(String[] args)
        {
                Student st=new Student();
                InPut input=new InPut(st);
                OutPut output=new OutPut(st);
                Thread in=new Thread(input);
                Thread out=new Thread(output);
                in.start();
                out.start();
        }
}
class Student
{
        String name;
        String sex;
        Boolean flag=false;
}
class InPut implements Runnable
{
        private Student st;
        int x=0;
        InPut(Student st)
        {
                this.st=st;
        }
        public void run()
        {
                while (true)
                {
                        if (st.flag)
                        {
                                try
                                {
                                        wait();
                                }
                                catch (Exception e)
                                {
                                }
                        }else
                        {
                                synchronized(Student.class)
                                {
                                        if (x==0)
                                        {
                                                st.name="zhansan";
                                                st.sex="boy";
                                        }else
                                        {
                                                st.name="lisi";
                                                st.sex="girl";
                                        }
                                        x=(x+1)%2;
                                }
                        }
                        st.flag=true;
                        notify();

                }
               
        }

}
class OutPut implements Runnable
{
        private Student st;
        OutPut(Student st)
        {
                this.st=st;
        }
        public void run()
        {
                while (true)
                {
                        if (!st.flag)
                        {
                                try
                                {
                                        wait();
                                }
                                catch (Exception e)
                                {
                                }
                        }else
                        {
                                synchronized(Student.class)
                                {
                                        System.out.println(st.name+"......"+st.sex);
                                }
                        }
                        st.flag=false;
                        notify();
                }
               
        }
}

点评

有这等好事.?哈哈  发表于 2014-2-20 14:14

评分

参与人数 2技术分 +2 收起 理由
zzkang0206 + 1
何伟超 + 1

查看全部评分

2 个回复

倒序浏览
楼主你读读你的程序 你加锁的时候能锁住吗?        synchronized(Student.class){}要把while(true){}整体都锁住
要不然就会出现  notify前面有个默认的this  该对象一会锁住,一会没锁住  , JVM  崩溃了!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马