随笔分类 -  JDK基础

摘要:JAVA SPI 约定如下:当服务的提供者提供了服务接口的一种实现之后,在jar包的META-INF/services/ 目录中同时创建一个以服务接口命名的文件,该文件中的内容就是实现该服务接口的具体实现类。 Java中提供了一个用于服务实现查找的工具类:java.util.ServiceLoade 阅读全文
posted @ 2018-03-16 10:08 wade&luffy 阅读(3548) 评论(0) 推荐(0) 编辑
摘要:java的NIO和AIO Buffer position、limit、capacity 初始化 Buffer 填充 Buffer 提取 Buffer 中的值 mark() & reset() rewind() & clear() & compact() Channel FileChannel Soc 阅读全文
posted @ 2018-02-14 18:32 wade&luffy 阅读(688) 评论(0) 推荐(0) 编辑
摘要:在Java中一般通过继承Thread类或者实现Runnable接口这两种方式来创建多线程,但是这两种方式都有个缺陷,就是不能在执行完成后获取执行的结果,因此Java 1.5之后提供了Callable和Future接口,通过它们就可以在任务执行完毕之后得到任务的执行结果。 Callable接口 可以看 阅读全文
posted @ 2017-06-24 17:53 wade&luffy 阅读(1169) 评论(0) 推荐(0) 编辑
摘要:Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现 阅读全文
posted @ 2017-01-01 09:22 wade&luffy 阅读(244) 评论(0) 推荐(0) 编辑
摘要:Shutdown Hook Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。JAVA中的ShutdownHook提供了比较好的方案。 JDK提供了Java.Runtime.addShutdownHook(Thread hook 阅读全文
posted @ 2016-12-31 08:55 wade&luffy 阅读(860) 评论(0) 推荐(0) 编辑
摘要:Java在1.5引入java.lang.instrument,你可以由此实现一个Java agent,通过此agent来修改类的字节码即改变一个类。 程序启动之时启动代理(pre-main) 通过java instrument 实现一个简单的profiler。当然instrument并不限于prof 阅读全文
posted @ 2016-11-18 16:49 wade&luffy 阅读(13296) 评论(3) 推荐(1) 编辑
摘要:packge-info.java是一个Java文件,可以添加到任何的Java源码包中。packge-info.java的目标是提供一个包级的文档说明或者是包级的注释。 packge-info.java文件中,唯一要求包含的内容是包的声明语句,比如: 包文档 在Java 5之前,包级的文档是packa 阅读全文
posted @ 2016-11-15 13:10 wade&luffy 阅读(388) 评论(0) 推荐(0) 编辑
摘要:何为同步?JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter和monitorexit指令实现,而方法同步是使用另外一种方式实现的,细节在JVM规范里并没有详细说明,但是方法的同步同样可以使用这两个指令来实现 阅读全文
posted @ 2016-10-17 13:23 wade&luffy 阅读(29683) 评论(0) 推荐(12) 编辑
摘要:Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator)。 TreeMap底层通过红黑树(Red-Black tre 阅读全文
posted @ 2016-10-15 10:44 wade&luffy 阅读(443) 评论(0) 推荐(0) 编辑
摘要:一、继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。 阅读全文
posted @ 2016-10-01 10:46 wade&luffy 阅读(431) 评论(0) 推荐(0) 编辑
摘要:理论阶段 函数接口 函数接口是行为的抽象; 函数接口是数据转换器; java.util.Function包。定义了四个最基础的函数接口: Supplier<T>: 数据提供器,可以提供 T 类型对象;无参的构造器,提供了 get 方法; Function<T,R>: 数据转换器,接收一个 T 类型的 阅读全文
posted @ 2016-09-22 17:17 wade&luffy 阅读(2725) 评论(0) 推荐(0) 编辑
摘要:由于HeapByteBuffer和DirectByteBuffer类都是default类型的,所以你无法字节访问到,你只能通过ByteBuffer间接访问到它,因为JVM不想让你访问到它。 分配HeapByteBuffer的方法是: ByteBuffer.allocate(int capacity) 阅读全文
posted @ 2016-09-21 09:46 wade&luffy 阅读(1583) 评论(0) 推荐(0) 编辑
摘要:锁优化分为代码层面的优化和jvm层面的优化 1. 代码层面的锁优化的思路和方法 一旦用到锁,就说明这是阻塞式的,所以在并发度上一般来说都会比无锁的情况低一点。 这里提到的锁优化,是指在阻塞式的情况下,如何让性能不要变得太差。但是再怎么优化,一般来说性能都会比无锁的情况差一点。 ReentrantLo 阅读全文
posted @ 2016-09-10 10:12 wade&luffy 阅读(1007) 评论(0) 推荐(1) 编辑
摘要:1. 什么是NIO NIO是New I/O的简称,与旧式的基于流的I/O方法相对,从名字看,它表示新的一套Java I/O标 准。它是在Java 1.4中被纳入到JDK中的,并具有以下特性: NIO是基于块(Block)的,它以块为基本单位处理数据 (硬盘上存储的单位也是按Block来存储,这样性能 阅读全文
posted @ 2016-09-09 09:38 wade&luffy 阅读(736) 评论(0) 推荐(0) 编辑
摘要:引用定义 实际上,Java中存在四种引用,它们由强到弱依次是:强引用、软引用、弱引用、虚引用。下面我们简单介绍下这四种引用: 强引用(Strong Reference):通常我们通过new来创建一个新对象时返回的引用就是一个强引用,若一个对象通过一系列强引用可到达,它就是强可达的(strongly 阅读全文
posted @ 2016-08-31 09:09 wade&luffy 阅读(359) 评论(0) 推荐(0) 编辑
摘要:== 和 equals 的区别 Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写e 阅读全文
posted @ 2016-08-30 08:31 wade&luffy 阅读(334) 评论(0) 推荐(0) 编辑
摘要:从中可以看出task1和task2依次最先执行,这时候currentPoolSize=2达到了corePoolSize,task3、task4、task5被送入缓冲队列,达到了workQueue最大值3,task6、task7、task8开启新的线程开始执行,此时currentPoolSize=5达 阅读全文
posted @ 2016-08-30 08:29 wade&luffy 阅读(690) 评论(0) 推荐(0) 编辑
摘要:Java Queue基础 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构。 offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。 这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchec 阅读全文
posted @ 2016-08-14 21:16 wade&luffy 阅读(5830) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch: 允许N个线程等待其他线程完成执行。无法进行重复使用,只能用一次。 比如有2个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 CyclicBarrier 实现让N个线程等待至某个状态(达到初始化数量值)之后 阅读全文
posted @ 2016-08-14 01:23 wade&luffy 阅读(474) 评论(0) 推荐(0) 编辑
摘要:枚举的序列化和反序列化 在序列化的时候Java仅仅是将枚举对象的name属性输出到结果中,反序列化的时候则是通过java.lang.Enum的valueOf方法来根据名字查找枚举对象。 同时,编译器是不允许任何对这种序列化机制的定制的,因此禁用了writeObject、readObject、read 阅读全文
posted @ 2016-08-13 03:02 wade&luffy 阅读(500) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示