这是offer方法 ,
public boolean offer(E e) {
checkNotNull(e);
final ReentrantLock lock = this.lock;
lock.lock();
try {
if (count == items.length)
return false;
else {
insert(e);
return true;
}
} finally {
lock.unlock();
}
}为什么要把this.lock赋值给一个新的引用的?直接用lock不行吗
public boolean offer(E e) {
checkNotNull(e);
final ReentrantLock lock = this.lock;
lock.lock();
try {
if (count == items.length)
return false;
else {
insert(e);
return true;
}
} finally {
lock.unlock();
}
}为什么要把this.lock赋值给一个新的引用的?直接用lock不行吗
解决方案 »
- 调用对象的方法问题
- 如何用java把经纬度转成屏幕坐标显示在屏幕上
- 请各位帮忙写个用递归实现从x开始连续加到y为止的算法,谢谢!!
- 想跟大家一起讨论下钩子函数的问题
- 一个比较有难度的问题,请高手进
- 如何从服务器端获得客户端屏幕分辨率
- 请教javamail的Transport.send(msg)方法的异常处理
- 大家进来看看,这段代码应做何解释???
- 初出茅庐,问个小问题
- 深夜求助,这什么我根据反射获取不到配置文 件的路径啊,配置文件在src目录下没错啊,老 是报空指针异常
- java创建子类对象时会自动创建父类对象吗
- 求老师帮看一下我写的一个最基本的javabean测试类,为什么set ,get没作用
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("no args.");
}
}
}像楼主的代码层级多,又没有排版,没法看。
我觉得你没理解我的意思,可能也没理解【真正理解】final的意思。
以前在写多线程代码,进入run方法的局部变量是必须final的(为什么要这么设计请自行脑补),这里虽然没有run方法,但作者可能有类似这样的意图(尽管可能没有真正用上)。所以为了保证this.lock不被随便改写引用(我禁不住再想问下,你真的明白final修饰的意义么?)
当然,如果上面的话你完全理解并认同,那当我没说。还有,这帖子1个月没更新了,这习惯得改改哟。
我觉得你没理解我的意思,可能也没理解【真正理解】final的意思。
以前在写多线程代码,进入run方法的局部变量是必须final的(为什么要这么设计请自行脑补),这里虽然没有run方法,但作者可能有类似这样的意图(尽管可能没有真正用上)。所以为了保证this.lock不被随便改写引用(我禁不住再想问下,你真的明白final修饰的意义么?)
当然,如果上面的话你完全理解并认同,那当我没说。还有,这帖子1个月没更新了,这习惯得改改哟。首先你说的run方法问题 只是局部变量生命周期问题,所以必须用final,以放入内部类的常量池,跟这个没关系
其次 this.lock变量也是final的,所以根本不存在【随便改写引用的问题】
原谅我没有看ArrayBlockingQueue源码就在这里显摆,不好意思,在你面前班门弄斧了,sorry。