• 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。

  • 相关阅读:
    解决WPF中异常导致的程序Crash
    Python---pep8规范
    Python---13面向对象编程
    Python---12函数式编程------12.3匿名函数&装饰器&偏函数
    Python---12函数式编程------12.2返回函数
    Python中*args和**kwargs的区别
    测试干货-接口测试(接口测试工具+接口测试用例)
    Python---13靠谱的Pycharm安装详细教程
    Python---12函数式编程------12.1高阶函数
    Python---11模块
  • 原文地址:https://www.cnblogs.com/tangwangming/p/8807604.html
Copyright © 2020-2023  润新知