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

  • 相关阅读:
    excel导入数据库表
    C# WinForm通过WebClient实现文件上传下载
    C#中的多线程——线程同步基础
    document.body.scrollTop为0的处理办法
    C#利用短信猫收发短信息的方法
    XML Serializable Generic Dictionary
    Making IE use PNG Alpha transparency
    String[3]: the Size property has an invalid size of 0.
    input style兼容IE6的方案
    安装window service 中出现Set Service Login对话框
  • 原文地址:https://www.cnblogs.com/tangwangming/p/8807604.html
Copyright © 2020-2023  润新知