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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. synchronized(对象){
  2. //需要被同步的代码
  3. }
复制代码


同步代码块儿为何一定需要一个对象呢?记得之前讲过的静态代码块儿,和构造代码块儿,都没有对象,虽然死记硬背知道这个对象是把锁,但是一直不理解为何需要这个对象,哪位师兄帮忙解释一下?

1 个回复

正序浏览
本帖最后由 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版有中文的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马