黑马程序员技术交流社区

标题: 关于多线程的this加锁,, [打印本页]

作者: 段金福    时间: 2014-8-4 20:29
标题: 关于多线程的this加锁,,
同步方法中 省略的对象时 this ,当A线程调用同步方法时 this 代表A  ,当B线程调用同步方法时 this 代表B  , 为什么会是同一把锁,有点想不明白。
作者: fxwb2005    时间: 2014-8-4 20:38
this代表的是当前对象的引用,而不是一个线程,谁调用这个方法,this就代表谁
作者: supertoy    时间: 2014-8-4 20:46
【锁必须相等】:如果用this作为锁,多个线程对【同一个对象】【有】同步作用,而多个线程对【不同对象】【没有】同步作用。【?不知你是凭据什么说:this->a&this->b&this是同一把锁】<-【难道是我理解的有问题?】
作者: 段金福    时间: 2014-8-4 20:54
supertoy 发表于 2014-8-4 20:46
【锁必须相等】:如果用this作为锁,多个线程对【同一个对象】【有】同步作用,而多个线程对【不同对象】【 ...

当A线程调用同步方法时 this 代表A  ,当B线程调用同步方法时 this 代表B  ,老师说的是同一把锁,有点不解 ,明明是2个不同线程对象
作者: GoodBoy123    时间: 2014-8-4 21:01
这个this是锁所在的本类对象。不是线程。如果你觉得this不好理解你可以自己创建一个对象然后当作为锁。
作者: MGC    时间: 2014-8-4 21:03
涨姿势来了
作者: supertoy    时间: 2014-8-4 21:07
public class Calc {

        public int k = 0;
       
        public synchronized void add(){
                k++;
                System.out.println(k);
        }
       
        public static void main(String[] args) {
       
                final Calc a = new Calc();
                for (int i = 0; i < 5; i++) {
                        new Thread(new Runnable() {
                                @Override
                                public void run() {
                                        for (int i = 0; i < 1000; i++) {
                                                a.add();
                                        }
                                }
                        }).start();
                }
               
               
        }
       

}
【不管常见几个线程,此时this等于a】
作者: supertoy    时间: 2014-8-4 21:08
【不管创建几个线程,此时this都等于a】
作者: 新语新空    时间: 2014-8-4 22:15
this指的是当前对象,不是当前线程。
作者: LFW    时间: 2014-8-4 22:33
段金福 发表于 2014-8-4 20:54
当A线程调用同步方法时 this 代表A  ,当B线程调用同步方法时 this 代表B  ,老师说的是同一把锁,有点不 ...

当A线程调用同步方法时 this 代表A  ,当B线程调用同步方法时 this 代表B》》》》压根就不对,this代表的是当前对象,例如老毕说的Resource r。不管你是A线程也好B线程也好,都是r对象在作为锁。




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