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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© H._张_♂ 中级黑马   /  2014-3-21 23:43  /  1521 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

那个synchronized()括号里面是锁的对象还是锁的什么。
锁住这个对象表示只能是这个对象使用代码块,还是说其他线程不能使用该对象
我觉得锁完后,应该是该代码块在同一时间只能该对象使用
但是我又在想,该对象在锁住一个代码块的时候,他自身是不是也被绑定,其他地方也不能用这个对象。
:'(好复杂的赶脚

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

6 个回复

正序浏览
synchronized()参数是对象放什么对象都行,一般可以放类名.class  this Object对象
回复 使用道具 举报
自己在看视频吧
回复 使用道具 举报
本帖最后由 my_android_drea 于 2014-3-22 15:00 编辑

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

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

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

回复 使用道具 举报
午夜b'Boy 来自手机 中级黑马 2014-3-22 13:34:57
板凳
要弄明白同步代码块,想想在火车上上公厕就好理解了…不多说,自己领悟
回复 使用道具 举报
这是一个死锁的小例子,你可以看着借鉴一下,看看对你学习死锁有没有什么帮助
  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. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
synchronized()中的是一个有wait notify finallyAll这些方法来修饰线程同步,而这些方法都存放于上帝Object类中。如果需要用到这些方法就必须有一个上帝的对象或者其子类对象才行。
其他线程也能使用其对象,而这个对象必须是共享对象,这样才能保证其他线程在同一个锁中。
所谓线程同步就是为了保证用户数据一致性,而给指定方法加上synchronized,锁定它,在当前访问的线程没有执行完之前,其它线程不能访问它,如果想要访问,就得等待,同步的意思,就是数据同步、一致的意思。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马