黑马程序员技术交流社区

标题: 多线程的同步函数问题 [打印本页]

作者: 623376390    时间: 2017-3-20 19:45
标题: 多线程的同步函数问题
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次。。。。。再解锁,有点蒙了,
请王大婶们给指点一二


作者: 623376390    时间: 2017-3-20 19:51
循环多次指的是同步函数外有个while循环

作者: 623376390    时间: 2017-3-20 20:40
懂了,每运行一次同步函数上锁,解锁,线程抢权限那是生死有命,富贵在天,有可能每个人都抢到了,也有可能只有一个人抢的到,轮番抢





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