zoukankan      html  css  js  c++  java
  • Vector 线程安全吗,HashTable线程安全吗

    Vector 他的实现原理和ArrayList,只不过在增删查改的时候,加了锁标记。

    Vector 不是绝对的线程安全。

    比如线程有现在A和B,同时add的话,因为add方法加了锁标记synchronized,所以如果A先拿到了这个锁,这个锁就是这个对象的实例,然后B必须要等待,等A释放锁之后,会去那锁,这时候都是安全的

    但是现在就是代码里面写了,先判断这个里面contains 有没有这个值,如果没有这个值,在调用add,这样就会有问题,比如A在调用Add的时候,B正好在走到了判断是否包含对的,那这样b在add时候,其实这样就会加入重复的。

    因为他的contains没有加锁,所以他不是绝对安全的。

    HashTable 所有的方法都加了锁标记,所以他是线程安全的。

    HashTable 和 HashMap的主要的比较

    2个的存储结构都差不多,但是hash值的算法都不一样,HashTable默认的初始大小为11,之后每次扩充为原来的2n+1,但是HashMap都是2的幂次方。

    也就是说HashTable会尽量使用素数、奇数。而HashMap则总是使用2的幂作为哈希表的大小。我们知道当哈希表的大小为素数时,简单的取模哈希的结果会更加均匀,

    所以hashTable的大小选择比较好,但是果模数是2的幂,那么我们可以直接使用位运算来得到结果,效率要大大高于做除法。所以从hash计算的效率上,又是HashMap更胜一筹

    Hashtable中,key和value都不允许出现null值。但是如果在Hashtable中有类似put(null,null)的操作,编译同样可以通过,因为key和value都是Object类型,但运行时会抛出NullPointerException异常

    HashMap中 ,key 和value 可以是null。

  • 相关阅读:
    (九)springmvc+mybatis+dubbo+zookeeper分布式架构 整合
    (八)springmvc+mybatis+dubbo+zookeeper分布式架构 整合
    (七)springmvc+mybatis+dubbo+zookeeper分布式架构 整合
    (六)springmvc+mybatis+dubbo+zookeeper分布式架构 整合
    28 android资源文件
    1 ArrayList和LinkedList的区别
    27 MediaPlayer和SurfaceView播放视频会闪黑屏一下
    26 事件分发
    25 Notification通知栏
    24 RadioGroup制作底部按钮
  • 原文地址:https://www.cnblogs.com/tangwangming/p/8807604.html
Copyright © 2011-2022 走看看