java
文章平均质量分 80
iteye_1873
这个作者很懒,什么都没留下…
展开
-
原子类实现原理
在JDK中提供了一些原子操作类: java.util.concurrent.atomic原子操作。 对于原子类变量的操作是不会存在并发性问题的,不需要使用synchronized关键字额外的实现线程同步。它底层自身的实现即可保证变量的可见性以及操作的原子性。一般我们可以使用AtomicInteger,AtomicLong等实现计数器等功能,利用AtomicBoolean实现标志...原创 2015-12-22 12:56:11 · 1024 阅读 · 0 评论 -
getResource和getResourceAsStream文件路径分析
一,简介 在JDK中,提供了以下方法来获取classpath下的资源: public abstract class ResourceUtils{ public static void main(String[] args) { test(); } /** * @param args ...原创 2016-01-07 22:58:24 · 523 阅读 · 0 评论 -
Unsafe类的使用
一,简介 Unsafe可以用于获取成员字段在类实例中的偏移量,直接操作变量在主内存中的值等操作。 1,获取unsafe.objectFieldOffset(Field f)成员变量地址偏移量。public class AtomicInteger extends Number implements java.io.Serializable { priva...原创 2015-12-27 21:31:05 · 86 阅读 · 0 评论 -
RunTime.getRunTime().addShutdownHook用法
一,简介 该方法的作用是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过RunTime.getRunTime().addShutdownHook(Thread hook)方法添加的钩子,当添加到jvm中的所有钩子执行完之后,jvm才会关闭,所以这些钩子可以在jvm关闭前进行资源销毁等操作。二,应用举例 ...原创 2015-12-27 20:22:34 · 154 阅读 · 0 评论 -
LinkedHashMap与LinkedHashSet可预知迭代顺序
一,简介 jdk中HashMap和HashSet的遍历是无序的,而LinkedHashMap和LinkedHashSet是两种可以预知迭代顺序的集合类。LinkedHashMap支持两种迭代顺序(插入顺序和访问顺序,其中默认是插入顺序)。而LinkedHashSet仅支持按插入顺序遍历。二,实现原理 LinkedHashMap<K,V>继承自Has...原创 2015-12-27 18:04:03 · 685 阅读 · 0 评论 -
ThreadLocal原理及使用
一,实现原理 ThreadLocal,ThreadLocalMap(ThreadLocal的静态内部类),Thread三个类。 1,在每个Thread实例中,都有一个threadlocals成员属性,用于存储该线程内的数据。 public class Thread implements Runnable {...原创 2015-12-27 15:48:28 · 82 阅读 · 0 评论 -
volatile关键字作用
一,简介 jdk中提供了volatile关键字,用于修饰变量。提供了两层语义: 语义一:保证共享变量内存的可见性(并不能保证操作的原子性)。 语义二:禁用指令的重排序。二,内存可见性原理分析 在Java内存模型中,内存分为主内存(堆内存)和工作内存(栈内存)两个部分,其中主内存是所有线程所共享的,而工作内存则是每个线程...原创 2015-12-26 23:10:59 · 81 阅读 · 0 评论 -
正则表达式
一,简介 正则表达式定义了字符串的一种结构。只要满足这种规则的字符串都可以与之进行匹配。二,正则表达式 * : 表示前面字符可以有零次或多次。举例:ab* 能匹配a、ab、abb、abbb……。 + : 表示前面字符可以有一次或多次。举例:ab+ 能匹配ab、abb、abbb……。等价于"abb*"。 ? : 表示前面字符可以有...原创 2015-12-26 14:15:18 · 69 阅读 · 0 评论 -
线程状态转移模型
一,简介 线程有新建,就绪,运行,阻塞,死亡5种状态。其中线程阻塞指的是暂停一个线程继续向下执行以等待某个条件发生(如某资源就绪等)。 二,状态转移模型 通常引起一个运行线程进入阻塞状态的方法有:sleep(),join(),wait()等。 1) sleep() 方法:sleep() 允许指定以毫秒为单位的一段时间作为参数,它使得线程在指...原创 2015-12-25 23:22:49 · 707 阅读 · 0 评论 -
Copy-On-Write并发容器
一,简介 在JDK1.5以上版本中,提供了CopyOnWriteArrayList,CopyOnWriteArraySet两种并发容器。采用读写分离的思想(读操作在元数据中操作,写操作则在副本中操作),降低锁冲突,提高并发性。二,实现原理 /** *读操作(没有加锁) * {@inheritDoc} * @thro...原创 2015-12-25 23:02:12 · 60 阅读 · 0 评论 -
transient关键字作用及集合类序列化的原理
一,简介 修饰变量,用于标明该变量不用序列化到字节流中。 static class User implements Serializable{ private static final long serialVersionUID = 1L; private ...原创 2015-12-25 22:35:33 · 407 阅读 · 0 评论 -
数值包装类的实现原理
一,案例情景 /** Integer案例**/ Integer i1 = 128; Integer i2 = 128; Integer i3 = 127; Integer i4 = 127; System.out.println(i1 == i2);//false System.out.print...原创 2015-12-25 21:51:35 · 286 阅读 · 0 评论 -
equals 和 == 的区别
一,区别介绍 对于引用类型 == 比较的是引用的地址是否相等。即两个变量是否指向同一个内存空间。对于基本数据类型byte,short,int,long,float,double,boolean,char(8种基本数据类型),则是比较的值(即内容)相等。 equals 用于比较对象内容是否相等。二,Object类中的equals方法 源码: ...原创 2015-12-25 20:28:56 · 69 阅读 · 0 评论 -
深拷贝与浅拷贝
一,深拷贝与浅拷贝的区别 对于引用类型类型变量,深拷贝是对变量所指向实例的完全拷贝,而浅拷贝则只是对该变量引用地址进行拷贝。二,深拷贝与浅拷贝的实现 浅拷贝: 深拷贝: 三,备注 Object中的clone()方法只是对实例进行浅拷贝,如果要实现深拷贝,必须对其进行重写。而且该方法能够识别出实例的具体类型,所...原创 2015-12-22 13:38:38 · 172 阅读 · 0 评论 -
jdk四种引用类型的作用及区别
一,简介 在java中提供了四种引用的类型。分别为StrongReference、WeakReference 、SoftReference以及 PhantomReference。二,四种引用类型的作用及区别 StrongReference:强引用类型。是java 的默认引用实现,如果不特别指定,代码中使用的都是强引用。只要对象存在强引用,则gc的时候都不会清理...原创 2016-01-18 23:15:56 · 244 阅读 · 0 评论