局部变量在Java中是线程安全的.hashmap在方法线程中使用声明是否安全?例如-
void usingHashMap()
{
HashMap<Integer> map = new HashMap<integer>();
}
Run Code Online (Sandbox Code Playgroud)
当两个线程在这里运行相同的方法时usingHashMap(),它们绝不是相关的.每个都thread将创建自己的每个局部变量的版本,这些变量不会以任何方式相互交互
如果变量不是本地变量,则它们将附加到实例.在这种情况下,运行相同方法的两个线程都看到一个变量,这不是线程安全的.
public class usingHashMapNotThreadSafe {
HashMap<Integer, String> map = new HashMap<Integer, String>();
public int work() {
//manipulating the hashmap here
}
}
public class usingHashMapThreadSafe {
public int worksafe() {
HashMap<Integer, String> map = new HashMap<Integer, String>();
//manipulating the hashmap here
}
}
Run Code Online (Sandbox Code Playgroud)
虽然usingHashMapNotThreadSafe在同一个实例上运行的两个线程usingHashMapNotThreadSafe将看到相同的x.这可能很危险,因为线程正试图改变map!在第二个,在同一个实例上运行的两个线程usingHashMapThreadSafe将看到完全不同的x版本,并且不能相互影响.
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |