ArrayBlockingQueue源码中遇到的疑惑

搬砖使我快乐! 2016-08-20 12:23:55
这是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不行吗

...全文
510 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 NewMoons 的回复:
引用 6 楼 u012997470 的回复:
[quote=引用 2楼换了马甲的小强 的回复:]个人觉得并没有实际意义,只是个人写法的问题吧
不清楚
我觉得你没理解我的意思,可能也没理解【真正理解】final的意思。 以前在写多线程代码,进入run方法的局部变量是必须final的(为什么要这么设计请自行脑补),这里虽然没有run方法,但作者可能有类似这样的意图(尽管可能没有真正用上)。所以为了保证this.lock不被随便改写引用(我禁不住再想问下,你真的明白final修饰的意义么?) 当然,如果上面的话你完全理解并认同,那当我没说。 还有,这帖子1个月没更新了,这习惯得改改哟。[/quote] 首先你说的run方法问题 只是局部变量生命周期问题,所以必须用final,以放入内部类的常量池,跟这个没关系 其次 this.lock变量也是final的,所以根本不存在【随便改写引用的问题】
NewMoons 2016-09-21
  • 打赏
  • 举报
回复
你贴的代码里并没有说明this.lock是final的。 原谅我没有看ArrayBlockingQueue源码就在这里显摆,不好意思,在你面前班门弄斧了,sorry。
NewMoons 2016-09-21
  • 打赏
  • 举报
回复
引用 6 楼 u012997470 的回复:
引用 2楼换了马甲的小强 的回复:
个人觉得并没有实际意义,只是个人写法的问题吧
不清楚
我觉得你没理解我的意思,可能也没理解【真正理解】final的意思。 以前在写多线程代码,进入run方法的局部变量是必须final的(为什么要这么设计请自行脑补),这里虽然没有run方法,但作者可能有类似这样的意图(尽管可能没有真正用上)。所以为了保证this.lock不被随便改写引用(我禁不住再想问下,你真的明白final修饰的意义么?) 当然,如果上面的话你完全理解并认同,那当我没说。 还有,这帖子1个月没更新了,这习惯得改改哟。
  • 打赏
  • 举报
回复
引用 2楼换了马甲的小强 的回复:
个人觉得并没有实际意义,只是个人写法的问题吧
不清楚
  • 打赏
  • 举报
回复
引用 3楼捏造的信仰 的回复:
楼主要学会贴代码
public class Demo {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("no args.");
        }
    }
}
像楼主的代码层级多,又没有排版,没法看。
最近才开始写博客
  • 打赏
  • 举报
回复
引用 1楼NewMoons 的回复:
新的变量加了final ,目的可能是不想让lock被改变吧。
这个目的感觉还是多此一举,加了final,还是可以改变this.lock,不如直接用this.lock,暂且以为是编码习惯楼
捏造的信仰 2016-08-24
  • 打赏
  • 举报
回复
楼主要学会贴代码
public class Demo {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("no args.");
        }
    }
}
像楼主的代码层级多,又没有排版,没法看。
  • 打赏
  • 举报
回复
个人觉得并没有实际意义,只是个人写法的问题吧
NewMoons 2016-08-21
  • 打赏
  • 举报
回复
新的变量加了final ,目的可能是不想让lock被改变吧。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧