- 博客(15)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
转载 JAVA设计模式之单例模式
概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、
2016-02-28 23:37:00 307
原创 DelayedQueue源码分析
概述存放具有过期时间的元素的无界阻塞队列,队列中的元素只有在到达指定过期时间时才能从队列中取出。队列中的head节点的过期时间最长。如果没有元素到达过期时间,则没有head节点,poll方法会返回null。判断一个元素是否过期,是通过调用元素的getDelay(TimeUnit.NANOSECONDS),如果方法的返回值小于等于0,则该元素过期。未过期的元素无法通过调用take方法或poll方...
2016-02-27 19:50:32 499
转载 redis集群选举机制
集中式集群和分片式集群Redis节点之间使用的是gossip协议进行通信,每个节点之间都会互相通信。gossip协议包含多种消息,包括ping,pong,meet,fail等等。ping:每个节点都会频繁给其他节点发送ping,其中包含自己的状态还有自己维护的集群元数据,互相通过ping交换元数据; pong:返回ping和meet,包含自己的状态和其他信息,也可以用于信息广播和更新; fail:某个节点判断另一个节点fail之后,就发送fail给其他节点,通知其他节点,指定的节..
2016-02-27 19:14:18 976
转载 G1和CMS处理器如何选择和各自的适用场景
G1和CMS如何选择G1最小堆内存 6个G能稳定运行,因此对cpu的要求最少是4核8GJDK8及更高版本同等环境下只要内存够大(最少8G)优先使用G1CMSCMS追求停顿时间越短越好对cpu性能要求比较高同时对内存要求不算高(最少4G)JDK8及更高版本同等环境下只要cpu性能比较好并且内存不算大 (最少4G)可以使用CMSJDK7及更低版本同等环境下 可选择CMS (G1不完善)注意:单核、双核cpu不适合并发类垃圾收集器,线程频繁来回切换也会比较耗时间,还不如串行垃圾收集器效率高...
2016-02-27 18:48:40 4026
转载 泛型的内部原理:类型擦除以及类型擦除带来的问题
一、Java泛型的实现方法:类型擦除前面已经说了,Java的泛型是伪泛型。为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦出(type erasure)。Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为...
2016-02-27 12:37:27 1947
转载 双重检查锁定(double-checked locking)与volatile实现多线程下的单例模式
单例模式有如下实现方式:[java] view plain copypackage com.zzj.pattern.singleton; public class Singleton { private static Singleton instance; private Singleton() { } public static Single...
2016-02-27 12:32:51 877
转载 Java内存区域
本文主要依据《深入理解Java虚拟机》这本书写的,有批评和建议请留言! Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个...
2016-02-27 11:27:48 1641
转载 Java内存模型 (java memory model,JMM)与内存屏障
转载自:浅析Java内存模型概述Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量是线程共享的,存在竞争问题的。Java内存模型规定了所有的变量都存储在主内存,每条线程还有自己的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等),都必须在工作内存中进行,而...
2016-02-27 11:21:51 394
转载 Java虚拟机结构
一、JVM主要的结构如下:二、各个区域功能介绍1)、方法区(Method Area): (1)用于存储虚拟机加载的类信息、常量、静态变量等,是各个线程共享的内存区域; (2)默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小; (3)方法区中还有一部分是运行时常量池,主要用来存...
2016-02-27 11:03:31 1628
原创 LinkedBlockingDeque源码分析
概述只在队列头部插入和删除元素的双向阻塞队列。该队列基于双向链表实现,双向链表仅使用一个ReenterantLock进行锁保护,并使用2个Condition来管理阻塞。因为只使用一个ReenterantLock,所以时间上,元素的插入和删除不能同时进行;空间上,元素的插入和删除只在队列的头部进行操作。为了实现弱一致性的iterator,看起来我们需要保证每个节点都能通过它的前继节点实现gc...
2016-02-25 19:02:01 3312
原创 线程与任务(Thread与Runnable)
实现runnable接口的类都是任务类,它在run()内部定义任务逻辑。把任务类对象作为参数创建线程实例,线程就会执行任务。timer是线程,而timertask是任务。创建一个timer,timer内部会自动创建一个线程。executors是executor的工厂类。executor是线程池的执行器。当有大量短小并发的任务时,可以在线程池中执行。
2016-02-25 18:57:03 708
原创 ThreadLocal源码分析
概述一个线程可以设置多个线程局部变量,多个线程局部变量ThreadLocal保存在Thread#ThreadLocalMap中。注意,通过ThreadLocal#get()方法保存的值,并不是保存在ThreadLocal的内部变量中,而是以该ThreadLocal为key(其实是以WeakReference<ThreadLocal>为key),以该值为value,保存在curren...
2016-02-25 18:46:21 348
原创 SynchronousQueue源码分析
概述SQ 为等待过程中的生产者或消费者线程提供可选的公平策略(默认非公平模式)。非公平模式通过栈(LIFO)实现,公平模式通过队列(FIFO)实现。使用的数据结构是双重队列(Dual queue)和双重栈(Dual stack)。FIFO通常用于支持更高的吞吐量,LIFO则支持更高的线程局部存储(TLS)。/** * The transferer. Set only in co...
2016-02-25 18:04:01 632 1
原创 LinkedTransferQueue源码分析
概述在dual queue中,每个节点必须以原子方式持有它们的matchStatus,我们的实现如下:对于数据节点,通过cas将item字段从一个具体的value值转变为null,反之对于请求节点也是一样,通过cas将item字段从null转变为具体的value值。相比朴素的M&S queue,dual queue对enqueue和dequeue操作要求额外的原子保护,也因此它实现了更...
2016-02-25 17:49:59 1338
原创 ThreadPoolExecutor源码分析
概述线程池着手解决2个不同的问题:在执行大量的异步任务时,他们通过减少每个任务创建线程的开销,提供了更好的性能;他们也提供了一种边界和管理资源的方法,包括任务执行时的线程管理。每一个ThreadPoolExecutor也保存了一些基本的统计信息,比如已经完成的任务数。ExecutorService使用线程池中的线程执行每一个提交的任务,通常由Executors的工厂方法来配置Executo...
2016-02-25 17:40:32 576
viewpager实现页面导航之三
2015-07-22
viewpager与预编译的点布局实现页面导航效果
2015-07-20
导入第三方类库却出现the importXXX can not be resolved
2015-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人