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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 623376390 初级黑马   /  2017-3-20 19:45  /  731 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

class input implements Runnable
{
        private resource r=null;
    public input(resource r)
    {
        this.r=r;
    }
        @Override
                        public void run()
                        {
                                // TODO Auto-generated method stub
                            int x=0;
                                        while(true)
                                        {
                                                                synchronized (r)
                                                                {
//                                                                        System.out.println("input.run()");

                                                                                        if (x==0)
                                                                                                        {
                                                                                                                r.name="mike";
                                                                                                            r.sex="nannanna";
                                                                                                            r.b=0;
                                                                                                        }
                                                                                                        else
                                                                                                        {
                                                                                                                r.name="girl";
                                                                                                                r.sex="女女女女女";
                                                                                                                r.b=0;
                                                                                                        }
//                                                                                                        r.flag=true;
//                                                                                                        r.notify();
                                                                               
                                                                }
                                                               
                                                                        x=(x+1)%2;
                                                                        r.b=0;
                                        }
                        }
       
}
第一个问题:synchronized (r)这个同步函数的所谓线程锁,上锁和解锁的执行者是谁,cpu还是线程本身、
第二个问题:  synchronized (r)这个锁在解锁原理是什么,是同步函数代码块儿执行一次就解锁,还是循环多次再解锁,存粹是看cpu的性情,可能循环一次就解锁,也可能循环10次20次。。。。。再解锁,有点蒙了,
请王大婶们给指点一二

2 个回复

倒序浏览
循环多次指的是同步函数外有个while循环
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
懂了,每运行一次同步函数上锁,解锁,线程抢权限那是生死有命,富贵在天,有可能每个人都抢到了,也有可能只有一个人抢的到,轮番抢
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马