黑马程序员技术交流社区
标题:
多线程中,同步代码块/同步函数的锁是对象,这是什么原...
[打印本页]
作者:
王艳静
时间:
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