- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
使用 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/
大家好,因为我是 CoffeeScript 的新手,所以我对此感到困惑。我正在关注一本名为“https://www.montecassino.org/images/data/attachments/0
我是一名学生,正在尝试为项目构建一个 Restful API。我对此很陌生,所以如果它很容易解决,请原谅。 我正在使用“mongoose”:“^5.3.4”,并尝试连接到 Mongo DB Atlas
我有一个数据集,其中包含一堆带有各种后缀的变量,我想将它们制作成前缀。数据集还包括一些没有任何后缀的变量。像这样的东西: df % select(ends_with("_loc")) %>%
本文整理了Java中okreplay.YamlTape.setName()方法的一些代码示例,展示了YamlTape.setName()的具体用法。这些代码示例主要来源于Github/Stackove
我想创建一个 data.table 的副本并更改新表中列的名称。当我更改 y$V1 的名称时,x$V1 的名称也会更改。为什么会这样,我该如何避免这种行为? 例子: x <- data.table(c
DT<-data.table(a=1,b=2,a=3) DT # a b a #1: 1 2 3 setnames(DT,"b","c") #Error in setnames(DT, "b",
重命名一个特定的变量我可以做例如 names(df1)[which(names(df1) == "C")] df1 A B X 1 1 2 3 我想知道 setNames() 是否也可以做到这
我正在编写一个图像拼图游戏,代码的一部分是将用户选择的碎片与正确图像的碎片进行比较。 每个图像片段都已作为 ImageIcon 添加到 JButton。 需要一个标识符来区分每个图像片段并进行比较。
我有一个返回data.table的脚本,该脚本将包含一组列。我想重命名其中的一些列,但是如果没有全部列,则setnames会中断。有什么方法可以重命名而不会引起循环+错误捕获或与现有名称相交? iri
我想知道是否可以在管道代码的末尾设置列表元素的名称。 data % purrr::map(get_data) names(data) % purrr::map(get_comm
我是 Aerospike 的新手..我的命名空间有多个集合。我正在尝试在 aerospike dB 命名空间中为不同的集合设置不同的 TTL。 我不想使用分配给命名空间的默认 ttl,而是想为每个集合
我正在构建一个 swing 应用程序,它在运行时在单个类上创建了所有可视组件。每个控件都显示良好。每当声明一个组件时,都会放置一个component.setName(String);。问题是,当尝试通
我是 Aerospike 的新手..我的命名空间有多个集合。我正在尝试在 aerospike dB 命名空间中为不同的集合设置不同的 TTL。 我不想使用分配给命名空间的默认 ttl,而是想为每个集合
我刚刚看了一个名为“许多方法和实例”的 youtube 教程。他制作了一个程序,你在其中输入一些内容,它会说“你的第一个女朋友是 _”。但它太复杂了。首先是主类: import java.util.S
我正在尝试在 Struts2 中编写一个拦截器,它根据某些条件将请求重定向到不同的操作。我的拦截器工作正常,如下所示。 public String intercept(ActionInvocati
我有一个使用套接字的多线程客户端服务器应用程序。当找到新的连接时,进一步的执行将转移到使用新的 Executors 线程池的新线程。 我想在该客户端的所有日志语句中记录客户端 ID。问题是我不想仅仅为
本文整理了Java中org.eclipse.xsd.XSDAttributeGroupDefinition.setName()方法的一些代码示例,展示了XSDAttributeGroupDefinit
本文整理了Java中org.eclipse.xsd.XSDModelGroupDefinition.setName()方法的一些代码示例,展示了XSDModelGroupDefinition.setN
本文整理了Java中org.geoserver.catalog.WMTSStoreInfo.setName()方法的一些代码示例,展示了WMTSStoreInfo.setName()的具体用法。这些代
本文整理了Java中bibliothek.util.xml.XElement.setName()方法的一些代码示例,展示了XElement.setName()的具体用法。这些代码示例主要来源于Gith
我是一名优秀的程序员,十分优秀!