首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

对象锁的变更

2012-11-19 
对象锁的变化???????? ?synchronized 关键字锁定对象。对象是在 synchronized 代码内部被锁定的,这一点对此

对象锁的变化

???????? ?synchronized 关键字锁定对象。对象是在 synchronized 代码内部被锁定的,这一点对此对象以及您对其对象引用所作的更改意味着什么呢?对一个对象作同步处理只锁定该对象。但是,必须注意不要重新分配被锁定对象的对象引用。那么如果这样做会发生什么情况呢?请考虑下面这段代码,它实现了一个 Stack:

??????

class Stack {   //与前面相同...   public synchronized void push(int val)   {     //如果为空,则重新分配整数数组(即我们的 Stack)。     if (index == intArr.length)     {       stackSize *= 2;       int[] newintArr = new int[stackSize];       System.arraycopy(intArr, 0, newintArr, 0, intArr.length);       intArr = newintArr;     }     intArr[index]= val;     index++;   }   public synchronized int pop()   {     int retval;     if (index > 0)     {       retval = intArr[index-1];       index--;       return retval;     }     throw new EmptyStackException();   } } 
?

?

?

???????这个修改更改了实际上获取的锁。获取的锁是针对为其调用方法的对象的,而不是锁定 intArr 变量所引用的对象。因为获取的锁不再针对 intArr 所引用的对象,所以允许代码重新指定 intArr 对象引用。

?

?

?

?

??????

热点排行