并发类容器-第一讲

Posted lys-lyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发类容器-第一讲相关的知识,希望对你有一定的参考价值。

一、基础知识夯实

1.首先是我们需要懂得几点是在java中的集中运算

直接看代码吧

技术图片
public class IntToBinary 
    public static void main(String[] args) throws UnsupportedEncodingException 

        int data = 4;
        System.out.println("the 4 is "+Integer.toBinaryString(data));

        //位与  &(1&1=1 1&0=0 0&0=0)
        System.out.println("the 4 is "+Integer.toBinaryString(4));
        System.out.println("the 6 is "+Integer.toBinaryString(6));
        System.out.println("the 4&6 is "+Integer.toBinaryString(4&6));
        //位或 | (1|1=1 1|0=1 0|0=0)
        System.out.println("the 4|6 is "+Integer.toBinaryString(4|6));
        //位非~(~1=0  ~0=1)
        System.out.println("the ~4 is "+Integer.toBinaryString(~4));
        //位异或 ^ (1^1=0 1^0=1 0^0=0)(有相同的就是 1 )
        System.out.println("the 4^6 is "+Integer.toBinaryString(4^6));

        // <<有符号左移 >>有符号的右移  >>>无符号右移
        System.out.println("the 1 << 4 is "+Integer.toBinaryString(4 << 1));
        System.out.println("the 1 >>> 4 is "+Integer.toBinaryString(4 >>> 1));
        //取模的操作 a % (2^n) 等价于 a&(2^n-1)
        System.out.println("the 345 % 16 is "+(345%16)+ " or "+(345&(16-1)));

    
View Code

 总结:我们知道的是,位运算是再接再2进制操作的,其他的运算也是最后要转化为 2 进制运算的,所以周期要长。

2.什么是hash:

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,

所有散列函数都有如下一个基本特性:根据同一散列函数计算出的散列值如果不同,那么输入值肯定也不同。但是,根据同一散列函数计算出的散列值如果相同,输入值不一定相同。

两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。衡量一个哈希函数的好坏的重要指标就是发生碰撞的概率以及发生碰撞的解决方案。任何哈希函数基本都无法彻底避免碰撞,常见的解决碰撞的方法有以下几种:1.开放寻址;2、再散列;3、链地址法(相同hash值的元素用链表串起来)。

3.比较 HashTable、HashMap、ConcurrentHashMap;

4.现在我们先说一下,为什么HashMap在高并发下是不安全的,原因是:在多线程情况下,会导致hashmap出现链表闭环,一旦进入了闭环get数据,程序就会进入死循环,所以导致HashMap是非线程安全的。

具体的可以参考文章:https://blog.csdn.net/qq_32534441/article/details/84202979

以上是关于并发类容器-第一讲的主要内容,如果未能解决你的问题,请参考以下文章

同步类容器和并发类容器

Java并发编程学习6-同步容器类和并发容器

[Java 并发编程实战] 集合框架之 同步容器类 & 并发容器类

架构师养成--7.同步类容器和并发类容器

Java并发工具类Java并发容器

JAVA并发同步容器和并发容器