jdk
文章平均质量分 71
collective_lz
技术人员的目标不是拥有多么厉害的技术,而是用技术去促成一个产品的成功
展开
-
JDK源码之CompletableFuture(三)anyOf,allOf是怎么实现的?
CompletableFuture实现原理,源码解读原创 2022-02-26 18:20:33 · 1414 阅读 · 2 评论 -
JDK源码之CompletableFuture(二)链式调用原理
CompletableFuture的链式调用,其原理是如何实现的,从源码角度讲解,让你一次性搞懂原创 2022-02-26 16:50:23 · 1216 阅读 · 1 评论 -
JDK源码之CompletableFuture(一)结果返回原理
会了这个CompletableFuture,并掌握其原理,你基本可以应付你工作中所有的并发问题原创 2022-02-26 15:15:57 · 2079 阅读 · 0 评论 -
Calendar的内部实现
我们平时操作时间都用common包中的DateUtils类,可以对时间增加天数,月份,小时,分钟等,你知道么,其实DateUtils只是一个工具类,它的内部是通过Calendar类来进行操作的。例如,如下代码,我们获取一个当前时间增加两天的时间:DateUtils.addDays(new Date(), 2);它的内部是这么实现的: public static Date add(Date date, int calendarField, int amount) { if (d原创 2020-06-06 13:20:28 · 155 阅读 · 0 评论 -
jdk8中的PermGen永久代去哪里
Java PermGen 去哪里了?原文链接:原文作者:Monica Beckwith 以下为本人翻译,仅用于交流学习,版权归原作者和InfoQ所有,转载注明出处,请不要用于商业用途在Java虚拟机(JVM)内部,class文件中包括类的版本、字段、方法、接口等描述信息,还有运行时常量池,用于存放编译器生成的各种字面量和符号引用。在过去(自定义类加载器还不是很常见的时候),类大多是”转载 2017-12-18 23:05:06 · 1185 阅读 · 0 评论 -
线程池细节详解ThreadPoolExecutor
关于线程池的几个参数的含义,我们就不多说了,下面我们通过源码看下这几个参数分别是在什么地方使用到的:核心池大小与最大池大小是在执行任务的时候用到的,这里我们不多说。当线程池中没有任务,线程池就会维持核心池大小的线程,这个源码如下:当线程进来会先被封装成一个Worker类,这个类实现了Runnable接口,如下: private final class Worker原创 2017-12-27 19:57:29 · 629 阅读 · 0 评论 -
HashMap在并发下可能出现的问题分析
我们都知道,HashMap在并发环境下使用可能出现问题,但是具体表现,以及为什么出现并发问题,可能并不是所有人都了解,这篇文章记录一下HashMap在多线程环境下可能出现的问题以及如何避免。在分析HashMap的并发问题前,先简单了解HashMap的put和get基本操作是如何实现的。1.HashMap的put和get操作大家知道HashMap内部实现是通过拉链法解决哈希冲突的,也转载 2017-12-27 20:29:54 · 3388 阅读 · 0 评论 -
多线程中wait跟sleep的区别
前几天去UC笔试,有一道简答题问到了。之前还真一直没留意到这个问题,所以答得也不好。无论学习什么都好,通过对比学习更有利于发现事物的共性和个性,对于知识点的理解更有明显效果(这也可能是UC笔试题上,5道简答题中,有4道都是关于X与Y的区别的问题的原因之一)。既然自己答得不好,那就写下这篇随笔,来警示下自己(不仅是sleep与wait区别,还有多用这种对比学习的学习方式)。翻了很多资料,转载 2018-01-21 20:47:57 · 314 阅读 · 0 评论 -
LinkedBlockingQueue源码解析
LinkedBlockingQueue是无界队列,其内部是链表结构组成的节点,看下其基本结构: static class Node<E> { E item; /** * One of: * - the real successor Node * - this Node, meaning the...原创 2018-02-09 20:39:48 · 239 阅读 · 0 评论 -
sleep与wait是否会占用cpu资源
一直对sleep与wait除了使用方法上的却别外,还对它们是否会占用cpu时间产生了疑惑,故此做了个实验如下:上图中是什么代码都没有执行的时候的cpu利用率,下面我们执行这段代码: public static void main(String[] args) { for (int i = 0; i < 10000000; i++) { Syste...原创 2018-02-08 13:38:10 · 38455 阅读 · 16 评论 -
Securitymanager,AccessController相关文章
介绍AccessController的文章Securitymanager的使用场景和方法说明Securitymanager相关的官方文档Securitymanager使用示例Securitymanager与策略文件相关说明原创 2018-04-23 15:53:18 · 194 阅读 · 0 评论 -
函数式编程
说实话jdk8出来很久了,很早以前就用过函数式编程,不过以前一直觉得是花架子,没什么用,现在发现在越来越多的第三方库和jdk中越来越多地使用函数式编程,所以现在准备花时间熟悉起来,下面是我学习与熟悉的过程中的一点总结。...转载 2018-06-06 22:43:58 · 217 阅读 · 0 评论 -
LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue、ConcurrentLinkedQueue、TransferQueue的原理与使用场景
在jdk中有许多的队列,队列的使用还是有一些难度的,因为涉及到了并发等概念,现在我们列举一下队列的特点:并发情况下不会有线程安全问题队列都有元素都有添加(生产者端使用)、获取(消费者端使用)功能基本上的使用场景都是在多线程、高并发的场景在jdk中的队列有如下几种:1、LinkedBlockingQueueLinkedBlockingQueue是使用比较多的队列,在SingleTh...原创 2019-02-13 22:28:19 · 1674 阅读 · 0 评论 -
cglib动态代理源码分析
本文分下面三个部分来分析cglib动态代理的原理。cglib 动态代理示例代理类分析Fastclass 机制分析 一、cglib 动态代理示例 1 public class Target{ 2 public void f(){ 3 System.out.println("Target f()"); 4 } 5 public转载 2017-12-06 00:05:16 · 1044 阅读 · 2 评论 -
Thread的中断机制(interrupt)
中断线程线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示值是否为true)。它并不像stop方法那样会中断一个正在运行的线程。判断线程是否被中断判断某个线程是否已被发送过中断请求,请使转载 2017-12-05 19:41:15 · 653 阅读 · 0 评论 -
java原子更新器AtomicReferenceFieldUpdater的使用
AtomicReferenceFieldUpdater 一个基于反射的工具类,它能对指定类的指定的volatile引用字段进行原子更新。(注意这个字段不能是private的)通过调用AtomicReferenceFieldUpdater的静态方法newUpdater就能创建它的实例,该方法要接收三个参数: 包含该字段的对象的类 将被更新的对象的类 将转载 2017-08-09 10:22:30 · 1874 阅读 · 0 评论 -
jdk8,Stream流水线源码解析
我们通过一个示例,进行源码解析:如下:Arrays.asList("a", "b", "c").stream().filter(e -> !e.equals("B")).skip(2).forEach(e -> System.out.println(e));首先看stream()方法,它是用了Collection的stream()方法: default Stream st原创 2017-07-24 23:46:22 · 2527 阅读 · 0 评论 -
必看:深入学习Java8中的函数式接口
必看:深入学习Java8中的函数式接口 2017-01-10 19:24点击上方“云栖社区”可以订阅哦引言目前由于系统已经全面切换为JDK8,所以有必要系统的了解一下Java8的一些新特性,以便后续在日常工作中可以使用一些高级特性来提高编程效率。因为Java8引入了函数式接口,在java.util.function包含了几大类函数式接口声明。这里第一篇主要研究一下Funct转载 2017-07-27 15:02:28 · 35837 阅读 · 2 评论 -
转载一篇写的ConcurrentLinkedQueue不错的文章
http://www.cnblogs.com/skywang12345/p/3498995.html转载 2017-09-13 20:21:49 · 168 阅读 · 0 评论 -
Java 异常输出后之前语句才输出的原因是什么?
public class Run { public static void main(String[] args) { System.out.println("end"); throw new RuntimeException("end problem"); }}执行结果为什么会出现异常end problem 在”end“之前输出的情况原创 2017-09-27 10:21:45 · 744 阅读 · 0 评论 -
JDK8—LinkedHashMap源码浅析
本篇文章叫做浅析,只是为了分析下LinkedHanshMap是如何保持有序的。LinkedHashMap有一个子类:static class Entry extends HashMap.Node { Entry before, after; Entry(int hash, K key, V value, Node next) { su原创 2017-09-27 20:31:47 · 365 阅读 · 0 评论 -
跟上java8:你忽略的新特性
来源:王爵nice,biezhi.me/2017/07/21/keep-up-with-java8-features.html如有好文章投稿,请点击 → 这里了解详情虽然我们开始了Java8的旅程,但是很多人直接从java6上手了java8, 也许有一些JDK7的特性你还不知道,在本章节中带你回顾一下我们忘记了的那些特性。 尽管我们不能讲所有特性都讲一遍,挑出常转载 2017-09-12 12:09:39 · 2173 阅读 · 0 评论 -
java动态代理原理源码解析(jdk8)
本文是在一篇动态代理文章的基础上,分析jdk8的动态代理源码,jdk8中动态代理的实现方式并没有变,只是源码的位置不同了,在此做下分析。我们先上动态代理的例子代码,然后进行源码分析:import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Pro原创 2017-11-28 20:23:38 · 2386 阅读 · 0 评论 -
Java中Unsafe类详解
java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能:1、通过Unsafe类可以分配内存,可以释放内存;类中提供的3个本地方法allocateMemory、reallocateMemory、freeMemory分别用于分配内存,扩充内存和释放内存,与C语言中的3个方法对应。2、可以定位对象某字段的内存位置,也可以修改对象的转载 2017-11-26 23:24:05 · 1052 阅读 · 0 评论 -
Java CAS 和ABA问题
独占锁:是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁:每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。一、CAS 操作乐观锁用到的机制就是CAS,Compare and Swap。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V转载 2017-11-29 21:36:57 · 195 阅读 · 0 评论 -
@RequestMapping 用法详解之地址映射(转)
引言:前段时间项目中用到了RESTful模式来开发程序,但是当用POST、PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为application/json, 而且服务器端通过request.getReader() 打出的数据里确实存在浏览器提交的数据。为了找出原因,便对参数绑定(@RequestParam、 @RequestBody、 @转载 2017-11-29 22:29:08 · 273 阅读 · 0 评论 -
ConcurrentHashMap源码解析(JDK8)
文章转自:https://my.oschina.net/hosee/blog/675884并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_原创 2017-12-01 22:34:00 · 266 阅读 · 0 评论 -
jdk8,stream流水线原理
深入理解Java Stream流水线前面我们已经学会如何使用Stream API,用起来真的很爽,但简洁的方法下面似乎隐藏着无尽的秘密,如此强大的API是如何实现的呢?Pipeline是怎么执行的,每次方法调用都会导致一次迭代吗?自动并行又是怎么做到的,线程个数是多少?本节我们学习Stream流水线的原理,这是Stream实现的关键所在。首先回顾一下容器执行Lambda表达式的方式,以转载 2017-07-21 00:25:31 · 3520 阅读 · 0 评论