HashMap
HashMap概述
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。——百度百科
HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型(键值对集合)。随着JDK版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。文章先基于1.7描述,最后再提1.8与之更改的地方。
123HashMap<String,String> hashMap = new HashMap();hashMap.put("张三& ...
Volatile简述
Volatile概念
volatile是一个特征修饰符(type specifier)。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值了。——百度百科
所以呢它主要是两个作用:一个是线程可见(保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。),一个是防止指令重排序。要理解这些首先呢需要了解我们java的一个内存模型(Java Memory Model,JMM)
Java Memory Model我们知道在java中,实例域、静态域和数组元素都存储在堆内存中,堆内存是线程共享,而其他的一些虚拟机栈等它们的的一些内容是线程独占不会有内存可见的问题也不受内存模型影响。Java线程之间的通信由Java内存模型控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程 ...
Synchronized简述
Synchronized概念
Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍可以访问该object中的非加锁代码块。——百度百科
synchronized锁定的是一个对象而不是代码块相当于对门加锁,房间里面做什么自定义。但只有拿到这个锁定的对象才能进入房间才能做接下来自定义的操作。使用同一把锁也就是同一个对象,那么一个线程拿走了就可以进入执行,其他的线程就拿不到进不了房间,直到那个线程执行完毕释放对象,那么其他线程再去共同竞争那一个对象,这样来达到一个互斥的效果避免共享数据错误。在字节码层表现monitorenter加锁和monitorexit释放锁。
1234//源代码synchronized (this) { int i = 1;}
123456// ...
故乡
《故乡》谱子收藏、全文查看
您的浏览器不支持视频标签
后来
《后来》谱子收藏、全文查看
您的浏览器不支持视频标签
隐形的翅膀
《隐形的翅膀》谱子收藏、全文查看
您的浏览器不支持视频标签
我真的受伤了
《我真的受伤了》谱子收藏、全文查看
您的浏览器不支持视频标签
面试一
事务的隔离级别有哪些?
多表查询有哪些方式?区别是什么?
介绍一下项目?你项目中下订单与支付之间的逻辑关系是什么?
写项目过程中遇到过哪些的问题?怎么解决的?