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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 段金福 中级黑马   /  2014-8-4 20:29  /  1412 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

同步方法中 省略的对象时 this ,当A线程调用同步方法时 this 代表A  ,当B线程调用同步方法时 this 代表B  , 为什么会是同一把锁,有点想不明白。

9 个回复

倒序浏览
this代表的是当前对象的引用,而不是一个线程,谁调用这个方法,this就代表谁
回复 使用道具 举报
【锁必须相等】:如果用this作为锁,多个线程对【同一个对象】【有】同步作用,而多个线程对【不同对象】【没有】同步作用。【?不知你是凭据什么说:this->a&this->b&this是同一把锁】<-【难道是我理解的有问题?】
回复 使用道具 举报
supertoy 发表于 2014-8-4 20:46
【锁必须相等】:如果用this作为锁,多个线程对【同一个对象】【有】同步作用,而多个线程对【不同对象】【 ...

当A线程调用同步方法时 this 代表A  ,当B线程调用同步方法时 this 代表B  ,老师说的是同一把锁,有点不解 ,明明是2个不同线程对象
回复 使用道具 举报
这个this是锁所在的本类对象。不是线程。如果你觉得this不好理解你可以自己创建一个对象然后当作为锁。
回复 使用道具 举报
涨姿势来了
回复 使用道具 举报
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】
回复 使用道具 举报
【不管创建几个线程,此时this都等于a】
回复 使用道具 举报
this指的是当前对象,不是当前线程。
回复 使用道具 举报
LFW 中级黑马 2014-8-4 22:33:23
10#
段金福 发表于 2014-8-4 20:54
当A线程调用同步方法时 this 代表A  ,当B线程调用同步方法时 this 代表B  ,老师说的是同一把锁,有点不 ...

当A线程调用同步方法时 this 代表A  ,当B线程调用同步方法时 this 代表B》》》》压根就不对,this代表的是当前对象,例如老毕说的Resource r。不管你是A线程也好B线程也好,都是r对象在作为锁。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马