自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

heihei

carryall

  • 博客(68)
  • 资源 (3)
  • 收藏
  • 关注

原创 JUC线程池

线程池ThreadpoolExecutor介绍1.线程的状态及表示在了解线程池的原理之前,必须先了解一下知识。线程的状态在ThreadpoolExecutor的表示: private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); private static final int

2018-01-15 21:15:22 254

原创 容器源码分析之PriorityQueue(十)

PriorityQueue的介绍PriorityQueue也叫优先队列,所谓的优先队列其实就是每次从优先队列中取出来的元素要么是最大值,要么是最小值,PriorityQueue是用二叉堆数据结构实现的。在了解PriorityQueue之前,我们最好先吧二叉堆先了解清楚。 可以参考这篇文章:二叉堆 图文解析。PriorityQueue的uml图: 说明:PriorityQu

2018-01-15 11:53:56 276

原创 JUC队列-ConcurrentLinkedQueue(四)

ConcurrentLinkedQueue介绍ConcurrentLinkedQueue是线程安全的队列,它适用于“高并发”的场景。它是一个基于链接节点的无界线程安全队列,按照 FIFO(先进先出)原则对元素进行排序。队列元素中不可以放置null元素(内部实现的特殊节点除外)。 ConcurrentLinkedQueue的UML图:说明:ConcurrentLinkedQ

2018-01-14 20:25:22 231

原创 JUC队列-LinkedBlockingDeque(三)

LinkedBlockingDeque介绍LinkedBlockingDeque是双向链表实现的阻塞队列。该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时操作(插入/删除);此外,LinkedBlockingDeque还是可选容量的,防止过度膨胀,默认等于Integer.MAX_VALUE。LinkedBlockingDeque的uml图说明:L

2018-01-14 20:24:01 255

原创 JUC队列-LinkedBlockingQueue(二)

LinkedBlockingQueue介绍LinkedBlockingQueue是一个以单向链表实现的阻塞队列,链表队列的吞吐量通常高于基于数组的队列,但是在大多数场景中,其可预见的性能要低。要注意的是,LinkedBlockingQueue可选容量,防止膨胀,默认大小为Integer.MAX_VALUE。LinkedBlockingQueue的UML图:LinkedBloc

2018-01-14 20:16:42 271

原创 JUC队列-ArrayBlockingQueue(一)

ArrayBlockingQueue介绍ArrayBlockingAQueue是用数组实现的线程安全的有界的阻塞队列。线程安全是指通过“互斥锁”保护竞争资源,实现了对线程对竞争资源的互斥访问,有界是指ArrayB咯KingQueue对应的数组是有界限的,阻塞队列是指当多个线程访问竞争资源时,当竞争资源已经被某个线程获取时,其他要获取该线程的线程需要等待。注意:ArrayBlocking

2018-01-14 20:15:41 292

原创 JUC锁-Semaphore(八)

Semaphore简介Semaphore是一个信号计数量,它的本质其实是一个”共享锁”。信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。它的uml图如下:是不是感觉有点熟悉呢?没错,它跟“Reetra

2018-01-13 20:48:02 196

原创 JUC锁-CyclicBarrier(七)

CyclicBarrier介绍CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。注意比较CountDownLatch和CyclicBarrier:(01) CountDownLatch的作用是允许1或N个线程等待其他

2018-01-13 14:37:59 211

原创 JUC锁-CountDownLatch(六)

CountDownLatch介绍CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。uml类图CountDownLatch的数据结构很简单,它是通过”共享锁”实现的。它包含了sync对象,sync是Sync类型。Sync是实例类,它继承于AQS。CountDownLatch源码分析1. CountDow

2018-01-13 14:36:17 225

原创 JUC锁-ReentrantReadWrite(五)

ReadWriteLock 和 ReentrantReadWrite介绍ReadWriteLock,顾名思义,是读写锁。 它维护了一对相关的锁 — — “读取锁”和“写入锁”,一个用于读取操作,另一个用于写入操作。“读取锁”用于只读操作,它是“共享锁”,能同时被多个线程获取。“写入锁”用于写入操作,它是“独占锁”,写入锁只能被一个线程锁获取。这是它的函数列表:// 返回用

2018-01-13 14:35:45 305

原创 JUC锁-LockSupport(四)

LockSupport的介绍LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“Thread.suspend 和 Thread.resume所可能引发的死锁”问题。LockSupport的函数列表// 返回提供给最近一次

2018-01-13 14:34:50 238

原创 JUC锁-Condition(三)

Condition介绍Condition的作用是对锁进行更精确的控制。Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的notifyAll()方法。不同的是,Object中的wait(),notify(),notif

2018-01-13 14:33:37 246

原创 JUC锁-互斥锁ReentrantLock(二)

ReentrantLock介绍ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,ReentrantLock锁,可以被单个线程多次获取。 ReentrantLock分为“公平锁”和“非公平锁”。它们的区别体现在获取锁的机制上是否公平。ReentrantLock在同一个时间点只能被一

2018-01-13 14:32:02 535

原创 JUC锁-框架与基本概念(一)

框架与基本概念在了解后面的内容之前,必须要先了解基本概念:AQS – 指AbstractQueuedSynchronizer类。 AQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现。AQS是独占锁(例如,ReentrantLock)和共享锁(例如,Semaphore)的公共父类。AQS锁的类别 – 分为“独占锁”和“共享锁”两种。 (01) 独占锁 – 锁

2018-01-13 14:30:35 772

原创 JUC原子类-类成员(五)

AtomicLongFieldUpdater介绍:AtomicLongFieldUpdater可以对指定”类的 ‘volatile long’类型的成员”进行原子更新。它是基于反射原理实现的。AtomicLongFieldUpdater函数列表// 受保护的无操作构造方法,供子类使用。protected AtomicLongFieldUpdater()// 以原子方式将给

2018-01-12 20:32:29 238

原创 JUC原子类-引用类型(四)

AtomicReference介绍:AtomicReference是作用是对”对象”进行原子操作。AtomicLong函数列表// 使用 null 初始值创建新的 AtomicReference。AtomicReference()// 使用给定的初始值创建新的 AtomicReference。AtomicReference(V initialValue)// 如果当前

2018-01-12 20:31:59 245

原创 JUC原子类-数组类型(三)

AtomicLongArray介绍:AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray这3个数组类型的原子类的原理和用法相似。本章以AtomicLongArray对数组类型的原子类进行介绍。内容包括:AtomicLong函数列表// 创建给定长度的新 AtomicLongArray。AtomicLongArray

2018-01-12 20:31:30 224

原创 JUC原子类-基本类型(二)

AtomicLong介绍:AtomicLong是作用是对长整形进行原子操作。 在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型。AtomicLong函数列表// 构造函数AtomicLong()// 创建值为initialValue的Atomi

2018-01-12 20:30:57 218

原创 JUC原子类-框架(一)

根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;引用类型: AtomicReference, AtomicStampedRerence, Atomic

2018-01-12 20:30:22 274

原创 多线程基础-常用线程方法(三)

1.notify和wait方法为什么notify,wait方法在Object中?Monitor内置于每一个Object对象中,是一个同步工具,相当于操作系统中的互斥量,即值为1 的信号量。也可以称作是对象的同步锁。notify(), wait()依赖于“同步锁”,并且每个对象有且仅有一个!这就是为什么notify(), wait()等函数定义在Object类,而不是Thread类中的原因。Objec

2018-01-12 20:27:51 345

原创 多线程基础-实现多线程的两种方式(二)

实现多线程的两种方式:1.实现Runnablepublic interface Runnable { public abstract void run();}// RunnableTest.java 源码class MyThread implements Runnable{ private int ticket=10; public void run(){

2018-01-12 20:27:19 238

原创 多线程基础-基本概念(一)

1.线程和进程的区别进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位,简而言之就是一个程序至少有一个程序,一个进程至少有一个线程。2.线程的状态线程状态转换:1.对Running的线程使用join或者sleep方法,线程会进入blocked状态,而sleep时间结束,join中断,或者io完成都会回到Runnable状态。

2018-01-12 20:24:11 168

原创 容器源码解析之容器全貌(一)

下面是一个简略的容器继承图 注:兰色为接口,草绿色为抽象类,红色为实现类我将从实现类入手逐个分析容器实现类,来逐渐了解容器全貌Collection容器List容器 VectorStackArrayListLinkedListSet容器 TreeSetHashSetLinkedHashListQueue容器 LinkedListPriorityQueu

2018-01-11 13:12:01 448

原创 容器源码分析之HashSet (三)

我们都知道HashSet集合是不允许重复元素的,因此这个类的利用什么来保证这个集合里面不会有重复的元素呢?结论是:HashSet是借助于HashMap的key不允许重复这个特性来实现的。HashMap是操作键值对,而HashSet是操作HashMap的key完成相关操作,或者说,HashSet全部的操作是借助于HashMap经过某种封装得到的。1.HashSet的继承结构 pu

2018-01-11 13:11:24 215

原创 容器源码分析之TreeMap(十)

1.TreeMap的结构我们知道,TreeMap的内部实现就是一个红黑树。关于红黑树的介绍,建议大家先看看这里 红黑树的原理和算法详细介绍2.TreeMap的继承关系-3.TreeMap的成员变量public class TreeMapK,V> extends AbstractMapK,V> implements NavigableMapK,V>, Clone

2018-01-11 12:29:22 250

转载 容器源码解析之LinkedHashMap(九)

1、LinkedHashMap的继承结构 public class LinkedHashMapK,V> extends HashMapK,V> implements MapK,V>从结构可以看出,LinkedHashMap继承HashMap并实现了Map接口。2、LInkedHashMap构造函数下面几个是LinkedHashMap的构造函

2018-01-10 08:55:13 164

原创 容器源码分析之HashTable(八)

1.HashTable的类声明 public class HashtableK,V> extends DictionaryK,V> implements MapK,V>, Cloneable, java.io.Serializable 继承的是Dictionary类,实现了Map、Cloneable、Serializable。注意:这也是Ha

2018-01-10 08:52:42 212

原创 容器源码解析之HashMap(七)

再进入源码解析之前,先来看看hashMap的工作原理当我们执行put存值时,hashmap会先调用key的hashcode方法的到哈希码,也就是桶的索引bucketIndex,找到该桶,然后遍历桶用equal方法来比较key,如果桶为空,就把kv放入桶中,如果桶存在该key,就用新value代替旧value,返回旧value,如果不存在就放入桶中,每个桶用单链表维护。下面是原理图: 1.

2018-01-10 08:49:14 384

原创 容器源码解析之LinkedHashSet(六)

对于LinkedHashSet而言,它继承与HashSet、又基于LinkedHashMap来实现的。LinkedHashSet底层使用LinkedHashMap来保存所有元素,它继承与HashSet,其所有的方法操作上又与HashSet相同,因此LinkedHashSet 的实现上非常简单,只提供了四个构造方法,并通过传递一个标识参数,调用父类的构造器,底层构造一个LinkedHashMap

2018-01-10 08:41:14 143

原创 容器源码分析之TreeSet(五)

HashSet是借助于HashMap的key不允许重复这个特性来实现的。HashMap是操作键值对,而HashSet是操作HashMap的key完成相关操作,TreeSet比HashSet加了排序的功能,那是不是TreeSet也因应该是通过操作TreeMap来实现的呢? right!!先把HashSet的链接发上来,一样的部分就不多解释了: 容器源码分析之HashSet(四)1.Tre

2018-01-10 08:40:27 197

原创 容器源码分析之Stack(四)

java.util.Stack是通过继承java.util.Vector来实现的,既然java.util.Vector这个东西已经基本上废弃了,所以java.util.Stack很尴尬,多人用,但是却不是最好的实现。原因很简单,Vector是ArrayList的线程安全版本,Vector也用数组实现,所以说,对于Stack,你觉得用数组还是链表好,当然是链表啦,一看就知道Vector和Stac

2018-01-10 08:39:33 246

原创 容器源码分析之LinkedList(三)

LinkedList的构造方法public class LinkedListE> extends AbstractSequentialListE> implements ListE>, DequeE>, Cloneable, java.io.SerializableLinkedList实现了List、Deque接口,说明它有双端队列的特征,同时支持克隆,序列化。我们

2018-01-09 11:29:36 238

原创 容器源码分析之ArrayList(二)

ArrayList的类声明首先看一下ArrayList的类声明public class ArrayListE> extends AbstractListE> implements ListE>, RandomAccess, Cloneable, java.io.SerializableArrayList类主要是继承AbstractList类并实现了

2018-01-09 09:18:45 216

原创 Effective Java之考虑用序列化代理代理序列化实例(七十八)

我们知道,实现了序列化的类。在反序列化时,实例的创建是由readObject方法来完成的。由于这是一个不同于构造函数的创建类实例的通道,因此在构造函数中的状态约束条件在readObjetc中也得一条不落下的实现。这很让人头大。 而且readObject的出现,让伪字节流攻击和内部域的盗用攻击成为可能。伪字节流攻击就是伪造一个字节流,通过readObject读取,内部域的盗用攻击是指用一个

2018-01-09 09:01:30 450

原创 Effective Java之对于实例控制,枚举类型优于readResolve(七十七)

Object readResolve()这个方法会紧挨着readObject()之后被调用,该方法的返回值将会代替原来反序列化的对象,而原来readObject()反序列化的对象将会立即丢弃。readObject()方法在序列化单例类时尤其有用。当然,如果使用java5提供的enum来定义枚举类,则完全不用担心,程序没有任何问题。我们从一个单例模式开始: public

2018-01-09 09:00:43 777

原创 Effective Java之保护性编写readObject方法(七十六)

readObject方法实际上相当于另一个公有的构造器,与其他构造器一样,它也需要进行参数的有效性检查与保护性拷贝。参考:Effective Java之必要时进行保护性拷贝(三十九)原因很简单,为了避免客户端修改可变对象,服务器把可变对象的引用指向了客户端找不到的地方,但是默认反序列化的过程把客户端找不到的地方给了客户端,给了客户端修改的机会,导致了错误,readObject也应该完成构造器做

2018-01-09 08:59:30 409

原创 Effective Java之考虑自定义的序列化模式(七十五)

为什么自定义序列化?这里直接举一个书上的例子public final class StringList implements Serializable { private int size = 0; private Entry head = null; private static class Entry implements Serializable {

2018-01-09 08:58:04 434

原创 Effective Java之谨慎地实现Serializable(七十四)

1.序列化的含义和作用序列化用来将对象编码成字节流,反序列化就使将字节流编码重新构建对象。 序列化实现了对象传输和对象持久化,所以它能够为远程通信提供对象表示法,为JavaBean组件提供持久化数据。2.序列化的危害1.降低灵活性:为实现Serializable而付出的最大代价是,一旦一个类被发布,就大大降低了”改变这个类的实现”的灵活性。如果一个类实现了Serializable,它

2018-01-09 08:57:08 856

原创 Effective Java之不要忽略异常(六十五)

任何一个被抛出的异常都是API设计者有意为之的,其中蕴含了特定的含义,所以千万不能忽略它们! try{ ...... }catch (Exception e){ } 这样的代码并不十分罕见,这有可能是在代码堆砌阶段的“简单写法”,也可能是程序员“偷懒”的写法,当然也有可能是连“何为Exception”都不得而知的“高人”的作品。这里犯了两个错误。  首先

2018-01-09 08:55:36 334

原创 Effective Java之努力使失败保持原子性(六十四)

这是我们需要遵守的规则:1.失败的方法调用应该使对象保持在被调用之前的状态。 2.错误通常是不可恢复的,当方法抛出错误时,不需要保持原子性。 3.作为方法规范的一部分,方法产生的任何异常都应该让对象保持在该方法调用之前的状态。如果违反这条规则,API文档就应该清楚地指明对象将会处于什么样的状态。失败原子性实现方法1.对象为不可变对象,那么对象创建出来就不能被修改了,也不需要维护。

2018-01-09 08:54:51 459

jetty-distribution-9.4.11.v20180605

Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。

2018-11-30

activemq-all-5.15.0.jar

activemq-all-5.15.0.jar

2017-08-28

activitymq实战 源代码

activitymq实战 源代码

2017-08-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除