黑马程序员技术交流社区
标题:
JAVA多线程中“锁”的概念的理解 ??
[打印本页]
作者:
荣天
时间:
2012-5-10 17:21
标题:
JAVA多线程中“锁”的概念的理解 ??
JAVA多线程中“锁”的概念的理解?? 哪位大虾 帮忙解释下
作者:
李啸
时间:
2012-5-10 17:23
说的通俗一点 就是有一个卫生间一次只能有一个解决 如果里面有人在 那么外面的人必须等里面的人出来再进去 也叫同步
作者:
黄坚声
时间:
2012-5-10 17:32
你从对象自身出发去想 反正一个对象就只有一把锁 只要有线程来访问它 就会上锁 其他的所有线程在此期间都不能访问上锁的对象或方法 就像一间房子,你进去后上了锁 不管是你自家的人 还是其他人都进不去 只有你自己在屋里
作者:
黄坚声
时间:
2012-5-10 17:33
你从对象自身出发去想 反正一个对象就只有一把锁 只要有线程来访问它 就会上锁 其他的所有线程在此期间都不能访问上锁的对象或方法 就像一间房子,你进去后上了锁 不管是你自家的人 还是其他人都进不去 只有你自己在屋里
作者:
小小企鹅
时间:
2012-5-10 17:35
本帖最后由 小小企鹅 于 2012-10-27 22:37 编辑
每个Java对象都有一个锁,每个锁只有一把钥匙。通常对象都没上锁,但如果对象有同步化方法的话,则线程只能在取得钥匙的情况下进入线程。也就是说并没有其他线程已进入的情况下才能进入。
只要把作用在数据上的方法同步化,在方法的声明上加synchronized这个修饰符:
private synchronized void fun(){};
就可以防止两个线程同时进入同一方法。
作者:
杨威
时间:
2012-5-10 17:48
我讲个大概啊
举个不是太恰当的小例子,在乡下有一个公共厕所,有两个坑(中间无隔墙),是可以同时两个人(同性)用的,但是呢这个厕所没标明那男女,所以呢当有一个人进入时,他就把门给锁上,里面的公共手纸啊都是他一个人用,对不对?但是现在问题来了,有这么一号人,他没上锁,另一个人也进来了(姑且考虑这两个人同性啊),后进来这人解决的快点,他把本属于先进来的手纸给用完了,那第一个人就没得用了,就一直在那蹲下去了,你说痛不痛苦?
上面例子中厕所门就好比程序入口,公共手纸就好比资源,不是太恰当,希望你能理解。{:soso_e100:}
作者:
Gao23616
时间:
2012-5-10 17:59
黄坚声 发表于 2012-5-10 17:32
你从对象自身出发去想 反正一个对象就只有一把锁 只要有线程来访问它 就会上锁 其他的所有线程在此期间都 ...
使程序更安全,不会出现
同步的前提:
同步需要两个或者两个以上的线程。
多个线程使用的是同一个锁。
未满足这两个条件,不能称其为同步。
同步的好处:
同步的出现解决了多线程的安全问题。
同步的弊端:
当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率。
作者:
HeiMaYSL
时间:
2012-5-10 18:28
锁一般用在多线程中,
作用是:把同步的共享数据放在里面,这样,这些数据在想干什么就干什么,与锁外面的无关,
但是,锁外面的线程都在急着进去,因为,里面有其他线程,所以,进不去。
只有当里面线程出来时,这时,等于释放了这个锁,而其他的线程就可以进去一个了。同理,它在里面时,也是想干什么都行,锁外面都进不去,只能等它出来后,释放了锁。其它线程才能进去。
毕老师在讲到这里时,举了个经典的例子:就是在火车上的厕所。你去看看,就会明白了。
其实,锁就像一个厕所一样。里面只能有一个人在里面办事,等这个出来了,把厕所门打开了,就是释放了厕所。这时,其他人才能进去一个。明白了吧。
作者:
HeiMaYSL
时间:
2012-5-10 18:29
锁一般用在多线程中,
作用是:把同步的共享数据放在里面,这样,这些数据在想干什么就干什么,与锁外面的无关,
但是,锁外面的线程都在急着进去,因为,里面有其他线程,所以,进不去。
只有当里面线程出来时,这时,等于释放了这个锁,而其他的线程就可以进去一个了。同理,它在里面时,也是想干什么都行,锁外面都进不去,只能等它出来后,释放了锁。其它线程才能进去。
毕老师在讲到这里时,举了个经典的例子:就是在火车上的厕所。你去看看,就会明白了。
其实,锁就像一个厕所一样。里面只能有一个人在里面办事,等这个出来了,把厕所门打开了,就是释放了厕所。这时,其他人才能进去一个。明白了吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2