gpt4 book ai didi

java - 在局部变量上同步是否合理?

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:58 31 4
gpt4 key购买 nike

从Java内存模型我们知道,每个线程都有自己的线程栈,局部变量放在每个线程自己的线程栈中。

并且其他线程无法访问这些局部变量。

那么在什么情况下我们应该同步局部变量呢?

最佳答案

你说的是下面的案例:

public class MyClass {
public void myMethod() {
//Assume Customer is a Class
Customer customer = getMyCustomer();
synchronized(customer) {
//only one thread at a time can access customer object
which ever holds the lock
}
}
}

在上面的代码中,customer 是一个局部引用变量,但是您仍然使用同步块(synchronized block) 来限制对对象customer 的访问> 指向(一次一个线程)。

在 Java 内存模型中,对象存在于堆中(即使引用对于存在于堆栈中的线程而言是本地的)并且同步就是将对堆上对象的访问限制为一个一次线程。

简而言之,当您说局部变量(非原始变量)时,只有引用是局部的,而不是实际对象本身,即它实际上是指堆上的对象,它可以是许多其他线程访问。因此,您需要对对象进行同步,以便单个线程一次只能访问该对象。

关于java - 在局部变量上同步是否合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43134998/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com