
Java
不可不戒
这个作者很懒,什么都没留下…
展开
-
CyclicBarrier
public class CyclicBarrier { /** * 每一次使用CycBarrier可以当成Generation的实例 */ private static class Generation { boolean broken = false; } /** The lock for guarding barrier ent原创 2016-08-10 10:41:11 · 448 阅读 · 0 评论 -
CountDownLatch
//CountDownLatch用于同步多个任务,强制他们等待由其他任务执行的一组操作完成。 //其底层是由AQS提供支持 public class CountDownLatch { /** * Synchronization control For CountDownLatch. * Uses AQS state to represent count. */原创 2016-08-10 11:20:14 · 332 阅读 · 0 评论 -
HashMap源码阅读
//HashMap数据结构(数组+链表+红黑树) //默认初始容量16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //最大容量 static final int MAXIMUM_CAPACITY = 1 << 30; //默认填充因子 static final float DEFAULT_LOAD_FACTOR = 0原创 2016-08-12 08:35:50 · 603 阅读 · 0 评论 -
ConcurrentHashMap源码阅读
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable { private static final long serialVersionUID = 7249069246763182397L; //table初始化原创 2016-08-12 09:29:28 · 501 阅读 · 0 评论 -
Java异常机制
JAVA异常 异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。 Java异常类层次结构图: 图1转载 2016-08-24 14:42:21 · 581 阅读 · 0 评论 -
深入分析Java序列化与反序列化
序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容。主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了java.io.Serializable接口才能被序列化 transient的作用是什么 怎么自定义序列化策略 自定义的序列化策略是如何被调用的 ArrayLi转载 2016-08-24 15:58:53 · 834 阅读 · 0 评论 -
ConcurrentLinkedQueue源码阅读
//非阻塞,一个基于链接节点的无界线程安全队列 public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> implements Queue<E>, java.io.Serializable { private static final long serialVersionUID = 1967456932675原创 2016-08-12 19:27:02 · 504 阅读 · 0 评论 -
LinkedBlockingQueue源码阅读
//阻塞式链表队列 public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { private static final long serialVersionUID = -6903933977591709194L原创 2016-08-12 20:52:45 · 432 阅读 · 0 评论 -
ArrayBlockingQueue源码阅读
//阻塞式数组队列 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { //存放元素数组 final Object[] items; /** items index for next take,原创 2016-08-12 21:18:06 · 306 阅读 · 0 评论 -
InputStream 源码阅读
//表示所有字节输入流实现类的基类。它的作用就是抽象地表示所有从不同数据源产生输入的类 public abstract class InputStream implements Closeable { private static final int MAX_SKIP_BUFFER_SIZE = 2048; // 从输入流中读取数据的下一个字节,以int返回 public abs原创 2016-08-25 16:48:06 · 522 阅读 · 0 评论 -
OutputStream 源码阅读
//所有字节输出流实现类的基类 public abstract class OutputStream implements Closeable, Flushable { // 将指定的字节写入输出流 public abstract void write(int b) throws IOException; // 将指定的byte数组的字节全部写入输出流 public vo原创 2016-08-25 18:49:40 · 525 阅读 · 0 评论 -
Semaphore
//Semaphore称为计数信号量,它允许n个任务同时访问某个资源, public class Semaphore implements java.io.Serializable { private static final long serialVersionUID = -3222578661600680210L; /** All mechanics via AbstractQu原创 2016-08-10 19:05:44 · 1139 阅读 · 0 评论 -
AbstractQueuedSynchronizer
/**自旋锁,CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程只在本地变量上自旋, * 它不断轮询前驱的状态,如果发现前驱释放了锁就结束自旋。 * * 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。 * * 利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。 * * 该同步器即可以作为排他模式也可以作为共享模式,当它被定义为原创 2016-08-10 17:57:14 · 696 阅读 · 1 评论 -
第三章 垃圾收集器与内存分配策略
垃圾对象判定1.引用计数算法给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加 1,当引用失效时,计数器值就减1,任何时刻计数器都为 0 的对象就是不可能再被使用的。引用计数算法的实现简单,判定效率也很高,在大部分情况下它都是一个不错的选择,当 Java 语言并没有选择这种算法来进行垃圾回收,主要原因是它很难解决对象之间的相互循环引用问题。2.可达性分析算法这种算法的基本思路是通过一系列原创 2016-03-22 18:57:16 · 419 阅读 · 0 评论 -
第六章 类文件结构
Class类文件结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符。Class文件格式采用一种类似C语言结构体的伪结构体存储两种数据类型:无符号数、表。表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表习惯以“_info”结尾。Class文件格式1.魔数(magic)每个Class文件的头4个文件称为魔原创 2016-03-23 10:56:37 · 399 阅读 · 0 评论 -
第七章 虚拟机类加载机制
1.虚拟机类加载机制把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。2.类加载时机虚拟机规范规定了有且只有5种情况必须立即对类进行“初始化”。2.1:遇到new、getstatic、putstatic、或invokestatic这4条字节码指令时,如果没有类进行过初始化,则需要先触发其初始化。生成这4条指令常见的场景:使用ne原创 2016-03-24 18:51:21 · 367 阅读 · 0 评论 -
第八章 虚拟机字节码执行引擎
1.栈帧栈帧用于支持虚拟机进行方法调用和方法执行的数据结构,栈帧存储了方法的局部变量表、操作数栈、动态链接、和方法返回地址信息。1.1 局部变量表用于存储方法参数和方法内部定义的局部变量。 局部变量表的大小在方法的Code属性中就已经定义好了,为max_locals的值。对于实例方法而言,索引为0的slot存放的是this引用,之后再依次存放方法参数,定义的局部变量;slot可以被重用,当局部变量已原创 2016-03-25 14:24:45 · 506 阅读 · 0 评论 -
Mybatis入门--增删改查
mybatis-config.xml<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configurati原创 2016-05-11 14:26:01 · 364 阅读 · 0 评论 -
Mybatis入门--关联查询一对一
一篇文章对应一个customerpublic class Article { private int id; private Customer customer; private String title; private String content; public int getId() { return id; } public原创 2016-05-11 18:44:11 · 504 阅读 · 0 评论 -
Mybatis入门--关联查询一对多
一个customer与多article关联<resultMap id="customerResultMap" type="Customer"> <id column="c_id" property="id"/> <result column="c_name" property="name"/> <result column="c_contact" pr原创 2016-05-12 10:23:44 · 437 阅读 · 0 评论 -
FutureTask源码阅读
public class FutureTask<V> implements RunnableFuture<V> { /** * 内部状态可能得迁转过程: * NEW -> COMPLETING -> NORMAL //正常完成 * NEW -> COMPLETING -> EXCEPTIONAL //发生异常 * NEW -> CANCELLED原创 2016-08-16 10:38:00 · 416 阅读 · 0 评论 -
ReentrantLock
//底层是基于AbstractQueuedSynchronizer实现 public class ReentrantLock implements Lock, java.io.Serializable { private static final long serialVersionUID = 7373984872572414699L; /** Synchronizer provid原创 2016-08-10 12:48:10 · 372 阅读 · 0 评论 -
ReentrantReadWriteLock
//可重入读写锁 public class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable { private static final long serialVersionUID = -6992448646407690164L; private final ReentrantR原创 2016-08-11 12:18:31 · 531 阅读 · 0 评论 -
SynchronousQueue实现原理
SynchronousQueue实现原理原创 2016-08-14 13:56:57 · 1160 阅读 · 0 评论 -
ThreadPoolExecutor源码阅读
public class ThreadPoolExecutor extends AbstractExecutorService { //线程池的运行状态(整形的高3位)和运行的worker数量(低29位) private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); private static原创 2016-08-15 10:55:23 · 484 阅读 · 0 评论