
Java基础
花公子丶
编程小菜,仅把自己学习所得记录于此。喜欢请捧,不喜请轻喷,有错的还希望大神指点,在此感激。
展开
-
ForkJoin全解——深度剖析ForkJoin源码
说明 本文对forkjoin源码进行了深入的剖析,包含你想了解的关于forkjoin的几乎所有内容 由于篇幅太大,将原文拆分为4个部分,新手建议按照顺序阅读,不建议跳读 目录 一、ForkJoin全解1:简单使用与大致实现原理 二、ForkJoin全解2:forkjoin实际工作流程与实现 三、ForkJoin全解3:CountedCompleter 四、ForkJoin全解4:附录,奇数自加的离散性 ...原创 2020-06-20 21:39:22 · 666 阅读 · 0 评论 -
ForkJoin全解4:附录,奇数自加的离散性
/** * 求一个hash,然后把hash的结果作为数组的位置,放入元素,即array[hash]不为空 * 现在这个算法是把每次自加后的值作为数组下标,占据该下标对应的数组位置,数组被占 * 据过的位置的值会被置为1,未被占据过的位置值为null。如果在占据数组中对应位置发现 * 该位置之前被占据过,这时候就是产生了冲突。如果最后没有冲突,也没有不为null的位置 * 则说明离散性很好 **/ public class HashTest{ //数组长度必须是2的指数幂 pr.原创 2020-06-20 21:29:51 · 289 阅读 · 0 评论 -
ForkJoin全解3:CountedCompleter
1、使用示例 import java.util.concurrent.CountedCompleter; import java.util.concurrent.atomic.AtomicInteger; public class CountedCompleterDemo { interface Applier<E>{ void apply(E e); } static class ForEach<E> extends CountedCo原创 2020-06-20 21:28:26 · 729 阅读 · 0 评论 -
ForkJoin全解2:forkjoin实际工作流程与实现
1、相关概念解释 1.1 “内部”和外部 当一个操作是在非ForkjoinThread的线程中进行的,则称该操作为外部操作。比如我们前面执行pool.invoke,invoke内又执行externalPush。由于invoke是在非ForkjoinThread线程中进行的(这里是在main线程中进行),所以是一个外部操作,调用的是externalPush。之后task的执行是通过ForkJoinThread来执行的,所以task中的fork就是内部操作,调用的是push,把任务提交到工作队列..原创 2020-06-20 21:19:21 · 1981 阅读 · 1 评论 -
ForkJoin全解1:简单使用与大致实现原理
1、 使用示例 import java.lang.reflect.Method; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveTask; import java.util.concurrent.ThreadLocalRandom; public class ForkJoinDemo { public static void main(String[] args) throws E..原创 2020-06-20 12:15:04 · 521 阅读 · 0 评论 -
JDK8 Stream源码完全解析——手写Stream
1、说明 本文代码基本参照JDK的实现,类名,接口名,属性名等都跟JDK保持一致 2、Stream核心原理与基本概念 2.1 流实现核心原理:opWrapsink JDK stream以Spliterator作为Stream的数据源,用以提供需要被操作的数据,而Sink则作为输出,存储输出结果。同时JDK stream内还有很多操作,如filter,collect,flatmap等,有时也称操作为算子。 每个sink都有一个accept方法,用于接收元素。为说明流实现原理,假设filter的sin原创 2020-06-20 11:51:07 · 2250 阅读 · 0 评论 -
CMS垃圾收集器介绍
一.总体介绍: CMS是一款优秀的垃圾收集器。众所周知,在oracle公司的Hotspot的架构中,大体上采用分代回收的机制。其中出生代又采用了拷贝复制的方法。如果对象在初生代内存活超过一定次数之后,就可以晋升到老生代中,而CMS垃圾收集器就是专门用来对老生代做收集。随着现代硬件的发展,更多的企业及服务最关注的点在GC的停顿时间,而CMS恰好是一种以获取最短回收停顿时间为目标的收集器转载 2017-01-04 16:25:39 · 746 阅读 · 0 评论 -
Java泛型--解析泛型擦除机制
本文主要介绍Java泛型的一些语法,重点解释Java泛型擦除机制,以及擦除所带来的一些问题原创 2015-04-30 17:12:37 · 816 阅读 · 0 评论 -
Java继承并非是简单的代码复制
继承是软件复用的一个关键,但是继承并非是简单的代码复制:即类A继承了类B,并不只是类A有了类B的代码。因为java是可以向上转型的,即B=new A()是合法的,而若有另一个类C,也从B继承,下面这行代码将报错:B=new C()。更加具体的代码如下所示: public class TestFactory { public static void main(String args[])原创 2015-02-10 17:40:04 · 1387 阅读 · 0 评论 -
java之yield(),sleep(),wait()区别详解-备忘笔记
1、sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。 例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的转载 2015-02-04 10:21:08 · 335 阅读 · 0 评论