java - "local variables are thread safe"有条件吗?

标签 java multithreading

在另一个帖子中我遇到了这个问题,所以我必须把它作为一个简单而有针对性的问题放在这里。

void method(){

   Machine machine = new Machine();
   ...
}

class Machine{
   private static Tool tool = new Tool();    
   ...
}

虽然Machine是method()中的局部变量,但它仍然是线程不安全的,因为Machine有一个静态实例变量“tool”,它可能是线程不安全的,因为所有线程都会由于静态而共享这个“tool”对象。

因此,如果 Machine 通过任何方式本身是线程安全的,那么可以安全地说“局部变量机器”是线程安全的。否则,即使“machine”是一个局部变量,它也是不安全的。

这种理解正确吗?

最佳答案

是的,这个理解是正确的。只有变量本身是线程安全的,也就是说其他线程不会同时修改它的值。

此保护不会扩展到局部变量引用的对象:根据对象的内部构造(例如可变性和静态变量的使用),该对象可能是也可能不是线程安全的。

请注意,原始类型的局部变量和引用不可变对象(immutable对象)的局部变量始终是线程安全的。

关于java - "local variables are thread safe"有条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47245238/

相关文章:

java - 等待多个 AsyncTask 完成

c - WinAPI中如何让两个线程共享一个全局变量?

java - 用于从内置摄像头和麦克风检测新媒体的 Android API

java - 如何使用 JAX-RS 流式传输无休止的 InputStream

java.sql.SQLException : After end of result set error in mysql 异常

android - 当我在 AsyncTask 或 Thread 中将 HTTP 更改为 HTTPS 时出现 NetworkOnMainThreadException

java - Java 电梯模拟器中的通知

java - 通过 RMI 保持相同的线程名称

java - Android sqlite 升级时出现重复列

java - ClassNotFoundException:HibernateDaoSupport - Tomcat 7