static map会有线程安全问题吗

作者&投稿:毅才 (若有异议请与网页底部的电邮联系)
~ 会。述代码使用t1和t2两个线程同时对HashMap进行put()操作,如果一切正常,我们期望得到的map.size()就是100000.但实际上,你可能会得到以下三种情况(注意,这里使用JDK7进行试验):

第一:程序正常结束,并且结果也是符合预期的。HashMap的大小为100000.

第二:程序正常结束,但结果不符合预期,而是一个小于100000的数字,比如98868.

第三:程序永远无法结束。并发形成循环链表,导致死循环。

二、ConcurrentHashMap不能解决所有线程安全问题

对于ConcurrentHashMap,如果只调用get或put方法是线程安全的,但你调用get后再调用put之前,如果有另一个线程也调用了put就很可能把前面的操作结果覆盖了,因为违反了原则操作的规则。此时可用putIfAbsent方法代替。如下面的例子


绍兴县19373852084: 如何线程安全的使用HashMap -
窄滢素 : 在周二面试时,一面的面试官有问到HashMap是否是线程安全的,如何在线程安全的前提下使用HashMap,其实也就是HashMap,Hashtable,ConcurrentHashMap和synchronized Map的原理和区别.当时有些紧张只是简单说了下HashMap不是线...

绍兴县19373852084: 在多线程中使用静态方法是否有线程安全问题 -
窄滢素 : 类的成员分为两类,静态成员(static member)和实例成员(instance member).静态成员属于类,实例成员则属于对象,即类的实例. 简单讨论一下在一个类中使用静态字段(static field)和静态方法(static method)是否会有线程安全问...

绍兴县19373852084: hashmap怎么变成线程安全的 -
窄滢素 : // synchronizedMap方法 public static Map synchronizedMap(Map m) { return new SynchronizedMap>(m); }// SynchronizedMap类 private static class SynchronizedMap implements Map, Serializable { private static final long serialVersionUID = ...

绍兴县19373852084: java中ConcurrentHashMap是线程安全的,我这样写有什么问题吗? -
窄滢素 : 这样使用是有问题的.ConcurrentMap能够保证每一次调用(例如一次putIfAbsent)都是原子操作,不受多线程影响,但并不保证多次调用之间也是原子操作.以上实现的GetKeyBM方法中,ConcurrentMap的方法被调用了许多次,不同线程之...

绍兴县19373852084: Android 编程中,使用静态变量有哪些缺点?应该如何规范使用 -
窄滢素 : 静态变量有如下缺点:1、 静态局部变量在静态存储区内分配存储单元.在程序整个运行期间都不释放,即占用较多空间.2、不能保存动态的数据.3、静态变量容易导致多个窗体共同访问时出现混乱,并且在多个窗体类的多个实例之间传递的时候不具有相互独立性,访问频繁的时候比较节约资源 . 4、静态变量存放在内存的堆区,可以保存到整个程序结束,生命周期较长. 对于静态变量少用可以,不能到处都用.

绍兴县19373852084: java多线程同步全局变量 -
窄滢素 : 1.使用JAVA Collections 这个类. 有 checkedList / Map / Set 方法. 将你的集合放进去,会返回给你一个线程安全的集合. 这样不需要你手动去做线程同步, java已经帮你做了.2.使用 synchronized 关键字, 同步 你的删除修改操作.3.使用 synchronized 修饰方法. 将修改删除的方法加锁.

绍兴县19373852084: 请教高手Hashtable、HashMap、HashSet的用法与区别? -
窄滢素 : 他们的区别:HashTable和HashMap是Map接口的实现类,其中HashTable的键或值不能为null,HashMap的键或值可以为null;HashTable是线程安全的,HashMap是线程不安全的,因此HashMap的效率要比HashTable高.HashSet是Set接口的实现...

绍兴县19373852084: 抽象类为什么不可以是线程安全的、不可是static的、不可是native的 -
窄滢素 : 抽象类不能被实例化 所以这些针对于实例化对象的关键字当然不能用

绍兴县19373852084: Java对象怎么调用 -
窄滢素 : java对象中,除了基本类型,其他对象传递都是地址传递,虽然java取消了指针的设定,但是其内部还是使用指针操作的,定义一个对象就相当于定义了一个对象类型的指针,这个指针的值为null,如果不进行初始化的话自然会报空指针异常,也...

绍兴县19373852084: Hashtable与HashMap有什么区别? -
窄滢素 : hashmap 线程不安全 允许有null的键和值 效率高一点、 方法外同步 有containsvalue和containsKey方法 HashMap 是Java1.2 引进的Map interface 的一个实现 HashMap是Hashtable的轻量级实现 hashtable 线程安全 不允许有null的键和值 效率稍低、 方法是是Synchronize的 有contains方法方法 、Hashtable 继承于Dictionary 类 Hashtable 比HashMap 要旧

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网