黑马程序员技术交流社区

标题: 同步代码块为何需要一个对象呢? [打印本页]

作者: 冷月霜飞    时间: 2015-5-15 17:12
标题: 同步代码块为何需要一个对象呢?
  1. synchronized(对象){
  2. //需要被同步的代码
  3. }
复制代码


同步代码块儿为何一定需要一个对象呢?记得之前讲过的静态代码块儿,和构造代码块儿,都没有对象,虽然死记硬背知道这个对象是把锁,但是一直不理解为何需要这个对象,哪位师兄帮忙解释一下?
作者: pvbj0314    时间: 2015-5-15 19:07
本帖最后由 pvbj0314 于 2015-5-15 19:09 编辑

每个对象都包含了一把锁(也叫作“监视器”),它自动成为对象的一部分(不必为此写任何特殊的代码)。
使用synchronized 关键字,以设置一个关键区域。
Java 通过“同步块”提供对关键区域的支持;这一次,我们用 synchronized 关键字指出对象的锁用于对其中封闭的代码进行同步。如下所示:
  1. synchronized(syncObject) {
  2. // This code can be accessed by only
  3. // one thread at a time, assuming all
  4. // threads respect syncObject's lock
  5. }
复制代码

在能进入同步块之前,必须在 synchObject 上取得锁。如果已有其他线程取得了这把锁,块便不能进入,必须等候那把锁被释放。以上内容摘自《Think in java》,你可以网上搜一下,第4版有中文的





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