黑马程序员技术交流社区

标题: 多线程中,同步代码块/同步函数的锁是对象,这是什么原... [打印本页]

作者: 王艳静    时间: 2015-8-16 22:12
标题: 多线程中,同步代码块/同步函数的锁是对象,这是什么原...
先来复习下多线程中,同步函数/同步代码块吧。
同步代码块
        用法:
                  synchronized(对象)
                  {需要被同步的代码}
        同步可以解决安全问题的根本原因就在那个对象上。其中对象如同锁。持有锁的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。

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

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

      谢谢指教。一起学习。
作者: zmhlnrs    时间: 2015-8-18 17:13
因为一个线程拿到锁之后其他线程拿不到这个对象 只能等第一个线程把锁释放了以后其他线程才可以拿到
作者: backin    时间: 2015-8-18 19:06
这个同步锁有个经典案例就是银行取钱的问题,某人Person在银行Bank有个账户Account,里面存了10000块钱,现在Person1和Person2去不同地方的银行同时取钱8000,因为两人同时接触Account账户,所以都可以操作结果取钱取了16000,那么问题来了,银行肯定不干,所以银行就将Account里面的取钱方法锁定(或者直接将Account锁定)Person1进入之后(上锁),Person2就等待,Person1取完钱Account里面的钱已经减少了(解锁),所以Person2就不能取8000了。案例就到这里了。以后共同学习,加油




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2