lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅。
阅读全文
一、JDK1.8的HashMap设计 1.1 整体概览 HashMap采用的是数组+链表+红黑树的形式。 数组是可以扩容的,链表也是转化为红黑树的,这2种方式都可以承载更多的数据。 用户可以设置的参数:初始总容量默认16,默认的加载因子0.75 初始的数组个数默认是16 容量X加载因子=阈值 一旦目
阅读全文
我们知道, 在 Java 5 之后,JDK 引入了 java.util.concurrent 并发包 ,其中最常用的就是 ConcurrentHashMap 了, 它的原理是引用了内部的 Segment ( ReentrantLock ) 分段锁,保证在操作不同段 map 的时候, 可以并发执行, 操作同段 map 的时候,进行锁的竞争和等待。从而达到线程安全的目的, 且效率大于 synchronized。但是在 Java 8 之后, JDK 却弃用了这个分段锁策略,接下来详细学习一下。
阅读全文
本文将介绍对线程池进行配置与调优的一些高级选项, 并分析在使用任务执行框架时需要注意的各种危险, 以及一些使用 Executor的高级示例。
阅读全文
通过围绕任务执行来设计应用程序,可以简化开发的过程,并有助于实现并发。Executor框架将任务提交与执行策略解耦开来,同时还支持多种不同类型的执行策略。
想要在将应用程序分别为不同的任务时获得最大的好处,必须定义清晰的任务边界。
阅读全文
Java内存模型说明了某个线程的内存操作在那些情况下对于其他线程是可见的。其中包括确保这些操作按照一个种Happens-Before的偏虚关系进行排序。
阅读全文
非阻塞算法通过底层的并发原语来保证线程的安全性,如CAS比较交换而不是使用锁。这些底层原语通过原子变量类向外公开,这些类也用做一种“更好的volatile变量”,从而为整数和对象引用提供原子的更新操作。
阅读全文
Java类库提供了丰富的类库来实现同步机制,但如果没有你需求的功能,那么可以通过JDK底层机制来构造自己的同步机制,包括内置的条件队列、显式的 Condition 对象以及AbstractQueuedSynchronizer 框架,实现状态依赖性的各种选择,以及在使用平台提供的状态依赖性机制如何遵守各项规则。
阅读全文
与内置锁相比,显示的Lock提供了一些扩展功能,在处理锁的不可用性方面有着更高灵活性,并且对队列行有着更好的控制。但ReentrantLocak不能完全替代snchronized,只有在snchronized无法满足需求时才应该使用它。读-写锁允许多个读线程并发地访问被保护对象,当访问以读取操作为主的数据结构时,它能提高程序的可伸缩性。
阅读全文
你了解方法区、永久代以及元空间的功能和区别吗?String.intern()原理你懂了吗?带着疑问,一起来看看吧.....
阅读全文
-从一道面试题开始学习JVM:Java最大栈深度有多大?要想回答该问题需要对jvm内存模型有一定的了解,在Java体系结......https://i.postimg.cc/NjfzfVtR/jvm.jpg
阅读全文
解释器与编译器两者各有优势:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获取更高的执行效率。
阅读全文