1
1
如果我没有错,那应该是正确的。 这是对堆栈与堆的基本理解。堆栈上声明的任何内容(函数中声明的变量)只能在本地使用。堆上声明的变量可以全局访问,也可以由其范围内的任何函数访问。 因此,如果您有一个线程处理一个函数,那么函数中的所有变量只能在该函数中访问。但是如果您有一个全局变量和两个线程,那么两个线程都可以访问该变量。问题在于,如果它们写入该变量,则必须确保它们不会相互覆盖。 解决方案是在一个线程对堆变量进行读/写时锁定堆变量,然后在完成时解锁堆变量。 |
2
0
如果运行下面的代码,您认为会发生什么?您将看到类似的输出,但顺序可能不同。
|
3
-1
你说得对。 静态变量可以作为Singleton在应用程序中插入,无论您有多少线程,它们都将始终引用同一个变量。 至于实例变量 “k” ,它只在嵌套类不是静态的情况下工作,这意味着 需要 的实例 主要的 能够安装 单处理器 。您的实例 单处理器 会有一个隐藏的变量引用你 主要的 例子就像你要写这个一样:
把你所有的 单处理器 相同的 主要的 例子 所有这些都是危险的,线程可能会获取变量 同时 另一个线程正在修改它。有很多关于线程安全的高级主题。对于简单类型,可以使用原子变量,se Concurrency package JavaDoc . |
a a · 为什么在这个可重入锁示例中需要引用计数? 2 年前 |
Grant · goroutines有高空闲唤醒电话 2 年前 |
hoaz · 如何安全地清理并发映射 6 年前 |
Alanpatchi · int基元类型的volatile声明 6 年前 |