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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 象牙 中级黑马   /  2014-8-15 21:22  /  1063 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

同步函数与静态同步函数的区别是什么?仅仅是锁不一样吗

4 个回复

倒序浏览
  1. 同步函数默认的锁是this:
  2.           .....
  3.     public void run()
  4.     {
  5.      while(true)
  6.      {
  7.       synchronized(this) //this当前同步函数对象
  8.       {... ...}
  9.      }
  10.     }
  11.     public synchronized void show() //同步函数
  12.     {
  13.      ... ...
  14.     }
  15. 静态同步函数的锁是class对象:
  16.       静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象:类名.class 该对象类型是class;
  17.       静态的同步方法,使用的锁是该方法所在类的字节码文件对象 类名.class;
  18.    private static int tick=100;
  19.            ......
  20.      synchronized(Ticket.class)    //字节码文件对象
  21.      ......
  22.   class Ticket
  23.   {
  24.          ......
  25.          public static synchronized void show()
  26.       ......
  27.   }
复制代码

回复 使用道具 举报
静态同步函数锁是class,同步函数锁默认是this或者别的对象,因为静态进内存时是没有对象的
回复 使用道具 举报
就是锁不一样
回复 使用道具 举报
非静态同步的锁是this或者其他对象,静态同步的锁只能是字节码文件的对象了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马