0%

什么是ForkJoin框架 适用场景

虽然目前处理器核心数已经发展到很大数目,但是按任务并发处理并不能完全充分的利用处理器资源,因为一般的应用程序没有那么多的并发处理任务。基于这种现状,考虑把一个任务拆分成多个单元,每个单元分别得到执行,最后合并每个单元的结果。

Fork/Join框架是JAVA7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果得到大任务结果的框架。

阅读全文 »

Jdk1.8中的stream有用过吗,详述一下stream的并行操作原理?stream并行的线程池是从哪里来的?

Stream作为Java8的一大亮点,它与java.io包里的InputStream和OutputStream是完全不同的概念。它是对容器对象功能的增强,它专注于对容器对象进行各种非常便利、高效的聚合操作或者大批量数据操作。

Stream API借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。同时,它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用fork/join并行方式来拆分任务和加速处理过程。所以说,Java8中首次出现的 java.util.stream是一个函数式语言+多核时代综合影响的产物。

Stream有如下三个操作步骤:

阅读全文 »

hashmap线程安全的方式?

HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全.

方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的. 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现.

方法二:重新改写了HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap. 这个方法比方法一有了很大的改进.

阅读全文 »

equals()和==区别,为什么重写equal要重写hashcode?

==是运算符 equals()是一个来自于Object的方法

==可以用于基本数据类型和引用

equals只能用于引用类型

== 两端如果是基本数据类型,就是判断值是否相等

equals()再重写之后就是判断两个对象的属性值是否相等

equals如果不重写就是 ==

阅读全文 »

Condition 类和Object 类锁方法区别

\1. Condition 类的 awiat 方法和 Object 类的 wait 方法等效

\2. Condition 类的 signal 方法和 Object 类的 notify 方法等效

\3. Condition 类的 signalAll 方法和 Object 类的 notifyAll 方法等效

\4. ReentrantLock 类可以唤醒指定条件的线程,而 object 的唤醒是随机的