0 0

为什么需要多用一个局部变量呢?5

看ArrayBlockingQueue的代码发现经常有把一个可访问的成员变量赋值给另外一个局部变量的地方,为什么要这样做呢?有哪些好处?
比如:final ReentrantLock lock = this.lock;

public boolean offer(E e) {
        if (e == null) throw new NullPointerException();
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            if (count == items.length)
                return false;
            else {
                insert(e);
                return true;
            }
        } finally {
            lock.unlock();
        }
}
JDK 
2013年3月14日 18:43

4个答案 按时间排序 按投票排序

0 0

提高效率而已

2013年3月17日 09:45
0 0

item 71,英文版283页到284页,25% performance improvement.

2013年3月16日 14:20
0 0

直接读取比先找this,再getField快一些,一些技巧,不用太纠结,effective java里讲到过。

2013年3月15日 14:38
0 0

在多线程的环境下,在第4行到第13行之间有可能this.lock就被其他线程修改了。如果直接用this.lock,到了第13行时this.lock指向的可能已经不是第4行lock的那个实例了。

2013年3月14日 19:46

相关推荐

    C++C代码审查表.pdf

    * 程序中是否出现相同的局部变量和全部变量? * 类名、函数名、变量和参数、常量的书写格式是否遵循一定的规则? * 静态变量、全局变量、类的成员变量是否加前缀? 表达式与基本语句重要性审查项结论 * 如果代码行...

    Java面向对象-笔记.docx

    * 引用数据类型(类、数组和接口)赋值是把原对象的引用(可理解为内存地址)传递给另一个引用。 十、构造方法 * 构造方法的语法:`[访问修饰符] 方法名(参数列表){//方法体的代码}` * 方法名:与类名相同。 * ...

    C C++代码审查表

    * 程序中是否出现相同的局部变量和全部变量? 这些检查项可以确保代码的命名规则清晰、合理和一致。 表达式与基本语句: 表达式与基本语句是代码的基本组成部分,审查项包括: * 如果代码行中的运算符比较多,...

    ThreadLocal的几种误区

    ThreadLocal并非Java线程的实现,它只是一个工具类,用于创建线程局部变量。ThreadLocal并不直接管理线程,而是为每个线程创建一个单独的变量副本。当线程使用ThreadLocal时,它会查找或创建属于该线程的变量实例,...

    static的作用

    - **全局变量与局部变量的作用域**:在C语言中,如果不加`static`修饰符,全局变量可以在整个程序中被访问,而局部变量(如函数内部定义的变量)仅在其定义的范围内有效。 - **`static`对全局变量的影响**:当全局...

    C++代码编写规范大全

    局部变量可以使用简短的单字符名,如i, j, k等。 - 遵循操作系统特定的命名约定,如Windows下的驼峰式命名或Unix中的下划线分隔。 - 不允许仅通过大小写区分相似标识符,避免混淆。 - 全局变量和局部变量不应有...

    c语言关键字的用法详解

    - **降低模块耦合度**:如果全局变量仅在一个C文件中被访问,将其转换为静态全局变量有助于减少模块之间的相互依赖,提高代码的独立性和可维护性。 - **函数内部状态保持**:若函数需要保持状态信息跨多次调用,使用...

    927python编程技术电大春季期末.docx

    1. **局部变量与全局变量**: - **全局变量**:在程序的顶级作用域,即不在任何函数内部定义的变量,称为全局变量。这些变量在整个程序范围内都可以访问和修改。 - **局部变量**:在函数内部声明的变量,其作用域...

    python 函数也可以是一个对象,可以存放在列表中并调用(csdn)————程序.pdf

    4. **闭包**:当一个内嵌函数引用了外部函数的局部变量时,就形成了闭包。闭包可以用来创建具有持久状态的函数对象。 5. **动态绑定**:由于函数是对象,我们可以根据运行时的情况动态决定调用哪个函数,增强了代码...

    C语言程序优化[文].pdf

    尽量减少全局变量,多用局部变量,因为局部变量通常存储在速度更快的寄存器中,且占用的空间在不同函数间可复用。合理设置编译器的优化选项,了解各种优化级别可能带来的影响,避免因过度优化导致的错误。 代码优化...

    系统小工具

    线程是执行代码的基本单位,每个线程都有自己的独立堆栈,存储局部变量和函数调用信息。这个小工具可以显示线程的内存地址,帮助用户追踪线程活动,找出可能导致程序崩溃或性能问题的原因。 “简单嗅探器”可能是一...

    VB指针葵花宝典之函数指针的配套代码。

    而且qsort要嵌套调用(不嵌套在VB里也慢),我们还要尽量节约堆栈,虽然1M的默认堆栈大小可以被扩充(有相邻的空闲空间时),但是我们依然要考虑可能存在的溢出,所以我做的qsort仅两个参数,两个局部Long型变量。...

    软件工程期末试卷答案全解.doc

    这是因为程序的控制结构中,顺序结构、选择结构和循环结构都是只能一个入口和一个出口的。 7. 软件测试过程中的确认测试主要是为了发现需求分析阶段的错误。这是因为确认测试是软件测试的最后一个阶段,主要是为了...

    pl0语言代码与语法

    - **int** (为局部变量分配存储空间) - **jmp**, **jpc** (无条件跳转和条件跳转) - **opr** (执行算术和关系运算) 每条指令由操作码、层次差和多用途字段组成,用于实现不同的功能。 #### 总结 通过以上解析,...

    python面试题(含答案).docx

    - 全局变量在整个程序中可见,而局部变量仅在其定义的函数内部有效。 11. **大小写敏感**: - Python代码中的标识符(如变量名、函数名)是大小写敏感的。 12. **类型转换**: - Python提供内建函数实现不同...

    C语言复习资料

    4. **静态局部变量**:静态局部变量在函数结束时不被释放,它的值在下次调用时仍保留。 5. **预处理命令#include**:`#include`用于将指定的头文件内容插入到源代码中,通常用于引入标准库或自定义的函数和变量声明...

    jdk1.7.0_17 绿色解压缩版

    2. **类型推断**:Java 7的泛型允许在局部变量声明时使用类型推断,使得代码更简洁。 3. **多路归并I/O**:提供了一种高效的方式处理大量数据的读写操作。 4. **字符串in switch**:在`switch`语句中可以直接使用...

    C#全接触C#全接触C#全接触

    变量是用来存储数据的容器,可以有局部变量和成员变量之分,参数则是方法接收的输入值,C#支持按值传递和按引用传递。 4. **自动内存管理** C#采用垃圾回收机制,自动管理内存,开发者无需手动释放内存,这降低了...

Global site tag (gtag.js) - Google Analytics