Java 程序员必须掌握的 124 道题(含答案)
发布时间
阅读量:
阅读量
多线程、并发及线程的基础问题
1)Java 中能创建 volatile 数组吗?
能者,在Java编程中是可以创建volatilé类型的数组的;但请注意,并非整个数组都会受到这种类型的影响。具体来说,在修改所指代的数组时会受到volatilé标志的影响;然而当多个线程同时对数组元素进行修改时,则无法保证这种保护措施的有效性了。
2)volatile 能使得一个非原子操作变成原子操作吗?
常见的例子是在类中定义了一个具有long数据类型的成员变量。假如该成员变量会被多个线程同时访问,并用于计数或其他数值操作等场景,则建议将其标记为volatile关键字。那么为何要做此选择呢?因为Java语言在处理长整型变量时并非完全支持原子操作机制,在这种情况下程序执行可能会出现 race condition问题(即某一线程正在修改数据时另一线程仅能观察到数据部分信息)。然而对于带volatile修饰符的long或double类型变量而言,则可避免此类问题的发生
3)volatile 修饰符的有过什么实践?
一种做法是为 long 和 double 类型变量使用 volatile 标识符,以确保它们的读写操作被视为原子操作。由于 double 和 long 都占用64位宽度,在读取时会分两部分进行。第一次获取前32位数据后立即完成第二次获取剩余32位的过程。然而,
全部评论 (0)
还没有任何评论哟~
