黑马程序员技术交流社区

标题: 同步锁的问题 [打印本页]

作者: 郭冬    时间: 2012-12-9 21:32
标题: 同步锁的问题
本帖最后由 郭冬 于 2012-12-9 23:57 编辑

用synchronized可以进行同步,同步的步骤是线程先判断锁,如果锁是开的就可以进入锁中的代码,然后将锁锁住,这样就解决了多线程安全问题。
但是我想如果当线程判断锁为开的后,进入锁中代码但还没有将锁锁住的时候休眠了,在这个时候第二个线程判断锁也为开,于是也可以执行锁中代码。这样的话,
不就依然存在多线程的安全问题吗?
作者: 小洋人最happy    时间: 2012-12-9 21:40
当线程判断完一进去就会把锁锁上,应该不存在你说的那种情况。 我得理解是只要进去就直接锁上了。

就像火车上上厕所一样,进了厕所就会锁上门了。
作者: 翁鹏    时间: 2012-12-9 22:31
本帖最后由 翁鹏 于 2012-12-9 22:36 编辑

先说一点,将锁置位是一个原子操作,即CPU中只要执行一条机器代码就可以完成锁的置位。

所以,一个线程要么一下就把它锁上,要么就没锁上。

不存在你说的进入了任务代码区,而没有锁上的情况。
你说的情况只可能在 将锁置位不是原子操作,要多条机器代码才能完成的情况下可能发生。

要么在判断完锁时间片就到了,失去执行权,这时还没有进入代码区。

进入了代码区的第一个原子操作就是上锁。
作者: 郭冬    时间: 2012-12-9 23:57
翁鹏 发表于 2012-12-9 22:31
先说一点,将锁置位是一个原子操作,即CPU中只要执行一条机器代码就可以完成锁的置位。

所以,一个线程要 ...

恩,谢谢你的回答,真是高手,明白了。




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