黑马程序员技术交流社区

标题: synchronized同步锁名称 [打印本页]

作者: 陈圳    时间: 2013-2-22 11:16
标题: synchronized同步锁名称
本帖最后由 陈圳 于 2013-2-23 21:05 编辑

看了多线程同步锁,发现,
同步代码块:synchronized()内的对象,没有任何要求,只要是对象就行了.
同步函数非静态用的是this引用.而静态用的是类名.class
那这个同步代码块内的名称是不是存在于栈内存?就如同局部变量一样的标示符名字?
两个独立的同步代码块,只要使用同一个对象的标示符名称就是使用同一把锁了?
那不同类中的多线程run()方法中,操作同一个共享数据.使用了同一个对象名,是不是也会同步?

作者: 偏執旳、靑春    时间: 2013-2-22 11:32
1.所谓代码块是指用“{}”括起来的一段代码,根据其位置和声明的不同,可以分为普通代码块、构造块、静态块、和同步代码块。
如果在代码块前加上 synchronized关键字,则此代码块就成为同步代码块。
同步代码块的格式:
synchronized(同步对象){
需要同步的代码;
}
同步对象一般为当前对象,即使用this关键字。
这个this.class也属于一个对象,其实是字节码文件

2.同步的机制在于如何共享资源。至于代码块的内容是不是在栈内存中,是的,因为同步的内容需要共享资源,这个资源必须在栈内存中进行判断
3.两个独立的代码块,如果你写上同一个对象,应该会出现问题,因为锁已接被用了,你不能一锁而用
4.共享的数据要定义在成员变量中,用同一个对象锁肯定不行,一锁不能多用,一般都是用this锁
作者: 胥文    时间: 2013-2-22 12:27
加同步就是为了解决安全问题:为了解决多个线程操作多条共享数据的时候引发的安全问题
一个同步块加一个锁就是为了不让其他线程进去同步代码块,更何况是两个独立的代码块使用同一把锁,肯定是可以同步的
只是降低了效率,一般情况下两个独立的同步代码块可以设置成不同的锁,
就是好让他们同时执行(注:同步里面嵌套同步的时候建议使用同一个锁,不然会照成死锁的)
那么不同类中的多线程run()方法中,操作同一个共享数据.使用了同一个对象名,是可以同步的,但是个人觉得这样就更多线程没什么关系了
还有就是同步代码块中的锁的任意对象,Object obj = new Object();//创建一个Object的对象,引用变量obj在栈内存中,实例new Object()在堆内存中
作者: 偏執旳、靑春    时间: 2013-2-23 16:51
这个帖子应该给技术分啊!!
作者: 陈圳    时间: 2013-2-23 16:59
偏執旳、靑春 发表于 2013-2-23 16:51
这个帖子应该给技术分啊!!

版主也很忙的,我们应该体谅,我们只能遍地撒花,争取挖掘,共同交流.本着建立和谐社会的原则,朝着小康家庭的道路前进.话说,今天版主很给力哦.
作者: Rancho_Gump    时间: 2013-2-23 20:49
陈圳 发表于 2013-2-23 16:59
版主也很忙的,我们应该体谅,我们只能遍地撒花,争取挖掘,共同交流.本着建立和谐社会的原则,朝着小康家庭的 ...

为了赶17期 最近确实挺忙的 从新申请报名程序  才走到博客这个环节 :'(
作者: 杨伟斌    时间: 2013-2-24 10:07
加油!         
作者: 偏執旳、靑春    时间: 2013-2-24 14:11
张向辉 发表于 2013-2-23 20:49
为了赶17期 最近确实挺忙的 从新申请报名程序  才走到博客这个环节

你还没进去啊?
作者: Rancho_Gump    时间: 2013-2-24 14:19
偏執旳、靑春 发表于 2013-2-24 14:11
你还没进去啊?

没有 正一步步走入学环节呢





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