首页 > 试题广场 >

以下描述中,哪些是完全正确的?

[不定项选择题]
以下描述中,哪些是完全正确的?
  • 对象实例中的成员变量是线程安全的
  • 方法内定义的变量是线程安全的
  • Singleton(单例)实例中的成员变量是线程安全的
  • volatile的变量是线程不安全的
解释下 b选项
1. 方法执行时,都会创建相应的栈帧,方法内定义的变量存放在栈帧的内部,栈帧会压入虚拟机栈
2. 每个线程都拥有独立的Java虚拟机栈(虚拟机栈线程之间不共享),故不存在线程不安全的问题
编辑于 2020-06-18 20:46:30 回复(0)
D因为不能保证变量的原子性
发表于 2019-07-15 16:54:04 回复(0)
当一个变量定义为volatile后,该变量对所有线程均可见。即当一条线程修改了这个变量的值,新值对于其他线程可以是立即得知的。但是这并不意味着volatile变量在并发下是线程安全的。这是因为volatile只保证当前线程在读取这个变量时,变量的值与其他所有线程一致。当前线程把读取到的一致的(在读的时候一致)值压入栈顶进行计算时,由于该计算可能不具备原子性。在执行该计算的各个字节码时,变量可能被其他线程改变。而这个改变并不会影响当前线程已压入栈顶的数据,这时栈顶的数据就成了过期的数据,从而发生线程安全问题。
发表于 2021-01-02 19:58:51 回复(0)
B选项,方法内定义的变量传递到外面去不就不安全了吗?也没说只在方法内使用啊
发表于 2023-10-03 21:12:01 回复(0)
volatile 
主要用来禁止指令重排
发表于 2019-01-19 17:18:03 回复(0)
“非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得结果也就是“线程安全”的了。
发表于 2018-07-27 22:38:17 回复(0)