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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 月时微 中级黑马   /  2013-6-17 18:59  /  1195 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程同步中synchronized的使用方法

6 个回复

倒序浏览
synchronized是同步线程,凡进入此修饰的代码,共同访问的资源就会被锁定

好比有个仓库,规定一次只能进去一个人取东西,当我进去的时候,仓库管理员就把门锁上了,那么你只能在门外等待,直到我出来,管理员开锁,然后让你再进去。
当你进去的时候,我在想拿东西,也只能在门外等

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 一晚上给你加这么多分。爽吧哈哈.

查看全部评分

回复 使用道具 举报 1 0
线程同步有两种方式:
1.同步代码块
synchronized(this) {
     //code.....
}
2.同步函数
public synchronized void function(){}
3.什么时候用同步?
当多条语句在操作同一个线程共享数据时,一个线程执行多条语句只执行了一部分,还没执行完毕,另一个线程参与进来执行,导致共享数据错误。
4.同步的前提
1)必须是两个或者两个以上的线程。
2)必须是多个线程使用同一个锁(this), 需要注意的是同步代码块中this可以是其他对象,但必须保证为同一对象。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
synchronized(){}语句,个人理解是一下这种关系。
{}:房间
():锁(并且是只能在房间内部打开的锁)  而传入的对象,就是锁的具体形态
synchronized:门

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

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

这就是我在学同步的时候的个人理解。。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 一晚上给你加这么多分。爽吧哈哈.

查看全部评分

回复 使用道具 举报 1 0
把synchronized称为锁,特点是:有线程在锁里面,别的线程谁也别想进去
假设有两个线程t1 和t2
t1首先进到锁里,开始执行操作,那么t2只能等待,等待t1从锁里出来;同理若t2在锁里,t1也只能等待。

synchronized内容:把被线程操作的共享数据的语句放到里面。
回复 使用道具 举报
线程同步有两种方式:
1.同步代码块
2.同步函数
同步应用
1,存在共享数据
2,多条语句操纵同一个线程。
回复 使用道具 举报
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马