黑马程序员技术交流社区

标题: 请简单形象的解释一下,谢谢 [打印本页]

作者: 月时微    时间: 2013-6-17 18:59
标题: 请简单形象的解释一下,谢谢
线程同步中synchronized的使用方法
作者: 张承富    时间: 2013-6-17 19:12
synchronized是同步线程,凡进入此修饰的代码,共同访问的资源就会被锁定

好比有个仓库,规定一次只能进去一个人取东西,当我进去的时候,仓库管理员就把门锁上了,那么你只能在门外等待,直到我出来,管理员开锁,然后让你再进去。
当你进去的时候,我在想拿东西,也只能在门外等
作者: 沐有鱼丸    时间: 2013-6-17 19:22
线程同步有两种方式:
1.同步代码块
synchronized(this) {
     //code.....
}
2.同步函数
public synchronized void function(){}
3.什么时候用同步?
当多条语句在操作同一个线程共享数据时,一个线程执行多条语句只执行了一部分,还没执行完毕,另一个线程参与进来执行,导致共享数据错误。
4.同步的前提
1)必须是两个或者两个以上的线程。
2)必须是多个线程使用同一个锁(this), 需要注意的是同步代码块中this可以是其他对象,但必须保证为同一对象。


作者: 王磊    时间: 2013-6-17 19:50
synchronized(){}语句,个人理解是一下这种关系。
{}:房间
():锁(并且是只能在房间内部打开的锁)  而传入的对象,就是锁的具体形态
synchronized:门

要进房间,要先判断门上的锁是什么状态,一个人进房间,把门锁上,无论在里面做什么,外边的人都管不着。一旦他打开了锁出了这个房间,另一个人再进去做什么,他也管不着。。

如果定义的是同步函数,那么就可以把整个函数体看做一个房间,synchronized还是那个门,而锁则是要进入房间这个人自带的,也就是这个对象的本身(this)。

这就是我在学同步的时候的个人理解。。
作者: 孔雀东南飞    时间: 2013-6-17 21:09
把synchronized称为锁,特点是:有线程在锁里面,别的线程谁也别想进去
假设有两个线程t1 和t2
t1首先进到锁里,开始执行操作,那么t2只能等待,等待t1从锁里出来;同理若t2在锁里,t1也只能等待。

synchronized内容:把被线程操作的共享数据的语句放到里面。
作者: 姚志远    时间: 2013-6-17 21:43
线程同步有两种方式:
1.同步代码块
2.同步函数
同步应用
1,存在共享数据
2,多条语句操纵同一个线程。

作者: 孙百鑫    时间: 2013-6-22 01:57
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




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