gpt4 book ai didi

java - 所有线程方法(如 getName/setName)都是线程安全的吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:16 24 4
gpt4 key购买 nike

使用 Thread 的方法,如 setName/getName 和其他来自不同线程的方法是否安全? API没说什么,看源码就知道了

private char name[];

public final void setName(String name) {
checkAccess();
this.name = name.toCharArray();
}

public final String getName() {
return String.valueOf(name);
}

看来可能会导致内存一致性错误。

最佳答案

Thread.getName() 是任何人都可以随时查询的属性。例如,监视器实用程序不断查询所有线程的名称。因此该方法必须是线程安全的,否则,没有关于谁可以安全访问它以及何时访问它的明确协议(protocol)。

虽然一直很困惑为什么 Thread 使用 char[] 来保存它的名字,但你提出了一个更重要的问题,getName() 显然没有正确同步。如果一个线程执行 setName("abcd"),另一个线程可能会观察到 getName()->"ab\0\0"

我会将问题发布到并发兴趣列表。见http://cs.oswego.edu/pipermail/concurrency-interest/2013-March/010935.html

关于java - 所有线程方法(如 getName/setName)都是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419860/

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