黑马程序员技术交流社区

标题: 多线程- 死锁,搞不懂。 [打印本页]

作者: H._张_♂    时间: 2014-3-21 23:43
标题: 多线程- 死锁,搞不懂。
那个synchronized()括号里面是锁的对象还是锁的什么。
锁住这个对象表示只能是这个对象使用代码块,还是说其他线程不能使用该对象
我觉得锁完后,应该是该代码块在同一时间只能该对象使用
但是我又在想,该对象在锁住一个代码块的时候,他自身是不是也被绑定,其他地方也不能用这个对象。
:'(好复杂的赶脚
作者: sgs_gzy    时间: 2014-3-22 00:07
synchronized()中的是一个有wait notify finallyAll这些方法来修饰线程同步,而这些方法都存放于上帝Object类中。如果需要用到这些方法就必须有一个上帝的对象或者其子类对象才行。
其他线程也能使用其对象,而这个对象必须是共享对象,这样才能保证其他线程在同一个锁中。
所谓线程同步就是为了保证用户数据一致性,而给指定方法加上synchronized,锁定它,在当前访问的线程没有执行完之前,其它线程不能访问它,如果想要访问,就得等待,同步的意思,就是数据同步、一致的意思。
作者: 追逐    时间: 2014-3-22 08:58
这是一个死锁的小例子,你可以看着借鉴一下,看看对你学习死锁有没有什么帮助
  1. class SiSuo implements Runnable {
  2.         
  3.         //定义一个标签
  4.         private boolean b;
  5.         SiSuo(boolean b) {
  6.                 this.b = b;
  7.         }
  8.         public void run() {
  9.                 if(b == true) {
  10.                         while(true) {
  11.                                 synchronized(Suo.obj1) {
  12.                                         System.out.println("if suoOne");
  13.                                         synchronized(Suo.obj2) {
  14.                                                 System.out.println("if suoTwo");
  15.                                         }
  16.                                 }
  17.                         }
  18.                 } else {
  19.                         while(true) {
  20.                                 synchronized(Suo.obj2) {
  21.                                         System.out.println("else suoTwo");
  22.                                         synchronized(Suo.obj1) {
  23.                                                 System.out.println("else suoOne");
  24.                                         }
  25.                                 }
  26.                         }
  27.                 }
  28.         }
  29.         
  30. }
复制代码




作者: 午夜b'Boy    时间: 2014-3-22 13:34
要弄明白同步代码块,想想在火车上上公厕就好理解了…不多说,自己领悟
作者: my_android_drea    时间: 2014-3-22 14:59
本帖最后由 my_android_drea 于 2014-3-22 15:00 编辑

括号里面的对象就是锁。不是锁住这个对象,而是这个对象就是锁,锁的是同步代码块。
同步代码块就像房间,括号的这个对象就是锁,线程就像人!死锁是同步嵌套产生的!!!!

看你的问题,你不清楚的有:1.哪个是锁;    2. 锁要锁的是什么。

括号里的对象就是锁,而这个锁要锁的是代码块!


作者: 邵景伦    时间: 2014-3-22 16:01
自己在看视频吧
作者: 杨殿生    时间: 2014-3-22 21:53
synchronized()参数是对象放什么对象都行,一般可以放类名.class  this Object对象




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