`

介绍个类AtomicInteger,可变的Integer

 
阅读更多
真是老了,搞了半天才想起这个类来,
我们会有这样的需求。多线程内部引用外面的值,这时编译器要求引用的对象必须是final的。但是我们又想改变这个值(比如Integer),现在直接指向一个新地址是不可以的。
有两种方案。
1:数组或是HashMap。这种方式比较大众化。但是很别扭。把代码复杂化了。
2:使用AtomicInteger(这个系列有很多,如Long,Boolean等)
推荐使用第二种方法。sun已经在很多方面为我们考虑过了。只是没有被发现。埋没了。
分享到:
评论

相关推荐

    浅析java中Integer传参方式的问题

    2. **封装Integer到一个可变类中**:创建一个类,如`MutableInteger`,并提供修改`value`的方法。 ```java class MutableInteger { int value; public void setValue(int value) { this.value = value; } } ...

    JAVA初级面试题(release)

    - **StringBuilder与StringBuffer**:可变字符串,线程安全与非安全的区别。 6. **方法**: - **方法定义**:参数传递(按值传递、按引用传递)。 - **返回值**:void与非void方法。 - **重载与重写**:了解...

    Java面试测试题目2018张大成总结

    - **String**: 不可变的字符序列,每次修改都会创建一个新的String对象。 - **StringBuffer**: 可变的字符序列,支持对字符串进行修改而不会创建新的对象,线程安全。 - **性能差异**:频繁修改字符串时,使用`...

    java初级知识

    `final`关键字用于声明不可变的变量、不可重写的类和方法。 **9. 抽象类** 抽象类不能被实例化,它主要用于提供一个包含抽象方法和具体方法的模板。 **10. 抽象类的体现-模板模式** 模板模式允许子类扩展抽象类的...

    java 最新面试题库 含N家公司 面试

    - **StringBuffer**/ **StringBuilder**:可变字符串类,用于频繁修改字符串内容的场景。`StringBuffer`线程安全,而`StringBuilder`不是。 #### 6. 原始类型与包装类型 这里探讨的是Java中原始类型和包装类型的...

    华为java面试题珍藏集合

    4. **String和StringBuffer的区别**:String是不可变的,每次修改都会创建新对象,而StringBuffer是可变的,修改时不会创建新对象,因此在大量字符串拼接时,StringBuffer更高效。 5. **运行时异常与一般异常**:...

    多线程程序避免冲突的3条简单规则

    例如,Java中的String、Integer等类都是不可变的。 2. 将状态私有化:将类的成员变量声明为private,避免其他线程直接访问。如果需要共享状态,可以通过提供公共的、同步的访问方法(如getter和setter)来控制。 3...

    Java面试题,自己查看学习的程度

    44. `String`和`StringBuffer`的区别:`String`不可变,`StringBuffer`线程安全且可变。 45. 堆栈实现:使用`java.util.Stack`类。 46. 集合的作用:存储和操作对象的容器。 47. 集合的通用方法:如`add()`、`...

    2019面试题目

    - **`final`**:修饰类、方法或变量,表示不可变。 - **`finally`**:用于异常处理,确保某段代码一定会被执行。 - **`finalize`**:已废弃的方法,用于对象回收前的清理工作。 #### 11. 序列化的方式 - 序列化是...

    JAVA API1.5中文文档 .rar

    Java 1.5的并发包(java.util.concurrent)中提供了原子类,如AtomicInteger,它们包含compareAndSwap()方法,用于实现无锁编程,提升了多线程环境下的性能。 十、枚举常量的常量表达式 在枚举中,常量可以在初始化...

    java加强笔记

    - **可变参数**允许一个方法接受任意数量的同类型参数。 - 例如: ```java public void print(String... strings) { for (String s : strings) { System.out.println(s); } } ``` ##### 5. 内省 - **内省**...

    良葛格Java JDK 5.0学习笔记

    6. **可变参数(Varargs)**: 通过`...`操作符,可以定义接受任意数量相同类型参数的方法。这使得编写方法时,不必为不同数量的参数创建多个重载版本。 7. **静态导入(Static Import)**: 静态导入允许直接...

    java笔试面试题汇总

    `final`关键字用于声明不可变的变量或方法,`finally`用于确保在异常处理中执行特定的代码块,而`finalize`是Object类中的方法,用于对象在被垃圾回收前的最后一次机会进行资源清理,但不推荐使用,因为其行为不确定...

    Java后端技术面试汇总-2019

    - **StringBuilder/StringBuffer**:可变字符串,后者是线程安全的。 - **重载和重写的区别**: - **重载**:同一个类中方法名相同但参数列表不同。 - **重写**:子类覆盖父类的方法。 - **抽象类和接口的区别*...

    Java后端技术面试基础汇总

    - `String`是不可变的,适用于字符串常量。 - `StringBuilder`和`StringBuffer`用于构建字符串,后者是线程安全的。 - **重载和重写:** - 重载发生在同一个类内,方法名相同但参数列表不同。 - 重写发生在继承...

    关于synchronized有趣的同步问题

    正确选择同步对象至关重要,尤其是当涉及到可变共享数据时。在处理并发问题时,我们需要理解锁的工作原理,并确保它们能够有效地保护需要同步的资源,以避免数据竞争和其他并发问题。同时,也要注意使用`volatile`...

    java代码-Java5-20练习题

    Java 5是一个重要的里程碑,引入了许多新特性和改进,例如泛型、枚举、自动装箱/拆箱、可变参数以及增强的for循环等。 1. **泛型**:Java 5引入了泛型,允许在类、接口和方法中使用类型参数,增强了类型安全。通过...

    java-source-code:Java源代码学习笔记

    2. **字符串(String)**:在Java中,字符串是一个非常重要的概念,它被设计为不可变对象。String类提供了丰富的字符串处理方法,如concatenation、substring、indexOf等,帮助开发者进行文本操作。 3. **集合框架**...

Global site tag (gtag.js) - Google Analytics