JAVA赋值语句线程安全性,例如 int a = 1线程安全?

在java里的赋值语句的线程安全性
int a = 1 是否线程安全?
int b = 2;
a= b 是否线程安全?

Object c = new Object() 是否线程安全?

我在博客里找到的答案是 第一个线程安全,第二个不知道,第三个线程不安全。

以下是我找到的一些解释:
int i = 1;
是线程安全的,因为这条语句会被翻译为一条指令iconst_1,不存在线程安全问题;

//A c = new A();
这个操作分为三部处理
1.栈里创建a的符号引用
2.堆里创建A对象
3.把a指向A
所以,这个赋值语句不是线程安全的

阅读 5k
2 个回答

看不出问题里有任何共享的对象,谈何线程安全与否?

  1. 方法内部定义的变量是不存在线程安全问题的;
  2. 方法内部创建的对象,只要不会给别的线程访问,也不存在线程安全问题。

怎样做到线程安全,其实只要在编写类的时候处理好线程安全性就可以了,使用这个类的时候就不用担心什么。如果一个类已知是线程不安全的(例如 StringBuilder),那么就限制它只在当前方法里面使用即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题