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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

先来复习下多线程中,同步函数/同步代码块吧。
同步代码块
        用法:
                  synchronized(对象)
                  {需要被同步的代码}
        同步可以解决安全问题的根本原因就在那个对象上。其中对象如同锁。持有锁的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。

同步函数
        格式:
                在函数上加上synchronized修饰符即可。
        那么同步函数用的是哪一个锁呢?
        函数需要被对象调用。那么函数都有一个所属对象引用。就是this。所以同步函数使用的锁是this。

那么问题来了:对象是怎么起到锁的作用的?
      在一个线程进入同步代码块或者函数时,这个起到锁的对象是做了什么变化,来阻止另一个线程进入同步代码块或函数的。

      谢谢指教。一起学习。

2 个回复

倒序浏览
因为一个线程拿到锁之后其他线程拿不到这个对象 只能等第一个线程把锁释放了以后其他线程才可以拿到
回复 使用道具 举报 1 0
这个同步锁有个经典案例就是银行取钱的问题,某人Person在银行Bank有个账户Account,里面存了10000块钱,现在Person1和Person2去不同地方的银行同时取钱8000,因为两人同时接触Account账户,所以都可以操作结果取钱取了16000,那么问题来了,银行肯定不干,所以银行就将Account里面的取钱方法锁定(或者直接将Account锁定)Person1进入之后(上锁),Person2就等待,Person1取完钱Account里面的钱已经减少了(解锁),所以Person2就不能取8000了。案例就到这里了。以后共同学习,加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马