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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张志阳 中级黑马   /  2012-3-16 13:38  /  1577 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

同步函数使用的锁是this,该怎么理解啊?

5 个回复

倒序浏览
哪个对象调用函数,this就代表那个对象
回复 使用道具 举报
this代表当前正在调用该同步函数的那个对象
回复 使用道具 举报
函数需要被对象调用,那么函数都有一个所属对象引用,它就是this
回复 使用道具 举报
原来如此,谢啦
回复 使用道具 举报
本帖最后由 李晓旭 于 2012-3-16 23:10 编辑
  1. class Demo
  2. {
  3.         public demo()
  4.         {
  5.                 //构造函数
  6.         }
  7.        
  8.         public synchronized void method()
  9.         {
  10.                 //非静态同步函数
  11.         }
  12. }

  13. class StaticDemo
  14. {
  15.         public StaticDemo()
  16.         {
  17.                 //构造函数
  18.         }
  19.        
  20.         public static synchronized void method()
  21.         {
  22.                 //静态同步法函数
  23.         }
  24. }

  25. //非静态函数,是被对象调用
  26. Demo d = new Demo();
  27. d.method();
  28. //因此在函数内部,同步函数就使用的是对象d 作为多线程共有锁
  29. //所以在函数内,对象就是this

  30. //静态函数,是通过类直接调用静态方法
  31. StaticDemo.method();
  32. //所以函数是使用在内存中的 Demo类 字节码文件对象
  33. //类名.class

复制代码
同步函数使用的锁是this,该怎么理解啊?


首先不是说同步函数使用的锁一定是this!
因为函数分为非静态函数和静态函数两种:
public synchronized void method(){ .......}
public static synchronized void method(){ ...... }

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

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