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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘俊佳 中级黑马   /  2012-8-10 09:50  /  1401 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么同步函数的锁是this?能够深入解释一下吗?最好是举例详细说明

2 个回复

倒序浏览
函数需要被对象调用,那么函数都有一个所属对象引用,就是this,所以同步函数使用的锁是this。
用一下代码验证可得结果:
  1. class Ticket implements Runnable
  2. {
  3.         private int ticket = 100;
  4.         Object obj = new Object();
  5.         boolean flag = true;
  6.         public void run()
  7.         {
  8.                
  9.                         while(true)
  10.                         {
  11.                                 show();
  12.                         }
  13.                
  14.         }
  15.         public synchronized void show()
  16.         {
  17.                
  18.                         if(ticket>0)
  19.                         {
  20.                                 try
  21.                                 {
  22.                                         Thread.sleep(10);
  23.                                 }
  24.                                 catch (Exception e)
  25.                                 {
  26.                                 }                                       
  27.                                 System.out.println((Thread.currentThread()==this)+"同步函数卖票"+ticket--);
  28.                         }
  29.         }
  30. }

  31. class ThisLockDemo
  32. {
  33.         public static void main(String[] args)
  34.         {
  35.                 Ticket t = new Ticket();
  36.                 Thread t1 = new Thread(t);
  37.                
  38.                
  39.                 t1.start();
  40.                

  41.         }
  42. }
复制代码
打印结果是“true同步函数售票ticket--”
这个在毕老师的视频里面有讲到过的。自己多练习两边就明白了。
回复 使用道具 举报
问题已解决  谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马