Evg*_*eev 12 java concurrency multithreading thread-safety
使用/ 和其他一些来自不同线程Thread的方法是否安全?API没有说什么,而是根据源代码判断setNamegetName
private char name[];
public final void setName(String name) {
checkAccess();
this.name = name.toCharArray();
}
public final String getName() {
return String.valueOf(name);
}
Run Code Online (Sandbox Code Playgroud)
它似乎可能导致内存一致性错误.
Thread.getName()是任何人都可以随时查询的属性。例如,监视器实用程序不断查询所有线程的名称。因此该方法必须是线程安全的,否则就没有明确的协议来说明谁可以安全地访问它以及何时访问它。
尽管一直令人困惑为什么Thread使用 achar[]来保存其名称,但您提出了一个更重要的问题,getName()显然没有正确同步。如果一个线程这样做setName("abcd"),另一线程可能会观察getName()->"ab\0\0"。
我会将问题发布到并发兴趣列表中。请参阅http://cs.oswego.edu/pipermail/concurrency-interest/2013-March/010935.html
| 归档时间: |
|
| 查看次数: |
937 次 |
| 最近记录: |