7 张伯毅

尚未进行身份认证

人生就如一道证明题,证明我们的存在不是偶然....

等级
博文 422
排名 6k+

JAVA NIO 源码 : Buffer

Buffer.java类是抽象类,并不能直接实例.是一个用于特定基本数据类型的容器。这里的特定基本数据类型指的是:除boolean类型的其他基本上数据类型。缓冲区是特定基本数据类型元素的线性有限序列在Buffer中有两种模式,一种是写模式,一种是读模式。类图:常量//TODO(标记)临时备忘位置变量,调用reset方法的时候用到....

2019-07-19 11:39:27

JDK12 jdk.internal 包 不可见

IDEA在Message中抛出如下问题:java:程序包jdk.internal.misc.Unsafe不可见(程序包jdk.internal.misc.Unsafe已在模块java.base中声明,但该模块未将它导出到未命名模块)可能出现以上问题的程序包:sun.net、sun.net.util、sun.net.www、jdk.internal.misc、jdk....

2019-07-19 09:48:42

ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor是一个可以在指定一定延迟时间后或者定时进行任务调度执行的线程池。...

2019-07-14 22:14:56

FutureTask 概览

概念FutureTask一个可取消的异步计算,FutureTask实现了Future的基本方法,提空startcancel操作,可以查询计算是否已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成的时候,一旦计算已经完成,那么计算就不能再次启动或是取消。一个FutureTask可以用来包装一个Callable或是一个runnable对...

2019-07-14 10:08:33

ThreadPoolExecutor 概述 [ 二 ]

ThreadPoolExecutor的实现实际是一个生产消费模型,当用户添加任务到线程池时相当于生产者生产元素,workers线程工作集中的线程直接执行任务或者从任务队列里面获取任务时则相当于消费者消费元素。程池巧妙地使用一个Integer类型的原子变量来记录线程池状态和线程池中的钱程个数。通过线程池状态来控制任务的执行,每个Worker线程可以处理多个任务。线程池...

2019-07-13 17:57:18

ThreadPoolExecutor 概述 [ 一 ]

概述线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行异步任务时直接new一个线程来运行,而线程的创建和销毁是需要开销的。线程池里面的线程是可复用的,不需要每次执行异步任务时都重新创建和销毁线程。二是线程池也提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态新增线程等。每个ThreadPoo!E...

2019-07-13 17:23:10

JAVA 线程池ThreadPoolExecutor的五种状态

在线程池成员变量ctl是一个Integer的原子变量,用来记录线程池状态和线程池中线程个数,类似于ReentrantReadWriteLock使用一个变量来保存两种信息。Integer类型是32位二进制表示,则其中高3位用来表示线程池状态,后面29位用来记录线程池线程个数。privatefinalAtomicIntegerctl=newAt...

2019-07-13 16:03:06

DelayQueue 概览

DelayQueue内部使用PriorityQueue存放数据,使用ReentrantLock实现线程同步。另外,队列里面的元素要实现Delayed接口,由于每个元素都有一个过期时间,所以要实现获知当前元素还剩下多少时间就过期了的接口,由于内部使用优先级队列来实现,所以要实现元素之间相互比较的接口。类图其中leader变量的使用基于Leade...

2019-07-13 11:23:15

PriorityBlockingQueue 概览

PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高或者最低的元素。其内部是使用平衡二叉树堆实现的,所以直接遍历队列元素不保证有序。默认使用对象的compareTo方法提供比较规则,如果你需要自定义比较规则则可以自定义comparators。PriorityBlockingQueue内部有一个数组queue,用来存放队列元素,...

2019-07-13 11:06:47

ArrayBlockingQueue 概览

底层使用数组实现.常量代码:/**Thequeueditems*/finalObject[]items;/**itemsindexfornexttake,poll,peekorremove*/inttakeIndex;/**itemsindexfornextput,offer,oradd*/...

2019-07-12 21:09:28

LinkedBlockingQueue 和 LinkedBlockingDeque 概览

LinkedBlockingQueue和LinkedBlockingDeque,两个都是队列,只不过前者只能一端出一端入,后者则可以两端同时出入,并且都是结构改变线程安全的队列。其实两个队列从实现思想上比较容易理解,有以下特点:链表结构(动态数组)通过ReentrantLock实现锁利用Condition实现队列的阻塞等待,唤醒LinkedBlockingQueueLin...

2019-07-12 20:52:20

ConcurrentLinkedQueue 概览

ConcurrentLinkedQueue是线程安全的无界非阻塞队列,其底层数据结构使用单向链表实现,对于入队和出队操作使用CAS来实现线程安全。ConcurrentLinkedQueue内部的队列使用单向链表方式实现,其中有两个volatile类型的Node节点分别用来存放队列的首、尾节点。从下面的无参构造函数可知,默认头、尾节点都是指向ite...

2019-07-12 20:34:36

抽象同步队列 AQS 三部曲 [ 三 ]

概述AQS有个内部类ConditionObject,用来结合锁实现线程同步。ConditionObject可以直接访问AQS对象内部的变量,比如state状态值和AQS队列。ConditionObject是条件变量,每个条件变量对应一个条件队列(单向链表队列),其用来存放调用条件变量的await方法后被阻塞的线程,如类图所示,这个...

2019-07-12 16:35:21

抽象同步队列 AQS三部曲 [ 二 ]

图解加锁/解锁流程图(点击,放大看)流程概述-------------------------------获取资源-------------------------------当一个线程调用acquire(intarg)方法获取独占资源时,会首先使用tryAcquire方法尝试获取资源,具体是设置状态变量state的值,成功则直接返...

2019-07-12 10:41:02

抽象同步队列 AQS三部曲 [ 一 ]

AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。AQS是一个FIFO的双向队列,其内部通过节点head和tail记录队首和队尾元素,队列元素的类型为Node。其中Node中的thread变量用来存放进入AQS队列里面的线程:Node节点内部的SHAR...

2019-07-12 10:27:52

如何设计实现一个LRU Cache?

1.什么是LRUCache?LeetCode上看到一个LRUCache实现的题目,题目描述是这样的esignandimplementadatastructureforLeastRecentlyUsed(LRU)cache.Itshouldsupportthefollowingoperations:getandset.get(key)-...

2019-07-11 11:02:41

JAVA : ReentrantReadWritelock

ReentrantReadWriteLock采用读写分离的策略,允许多个线程可以同时获取读锁。架构图读写锁的内部维护了一个ReadLock和一个WriteLock,它们依赖Sync实现具体功能。而Sync继承自AQS,并且也提供了公平和非公平的实现。下面只介绍非公平的读写锁实现。我们知道AQS中只维护了一个state状态,而Ree...

2019-06-27 18:09:18

Thread.sleep、Object.wait、LockSupport.park 区别图解

Thread.sleep、Object.wait、LockSupport.park区别如下图:参考:Java并发编程之美https://blog.csdn.net/u013332124/article/details/84647915

2019-06-26 17:53:22

JAVA 可重入锁: ReentrantLock

概念ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性,synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式。那么,要想完完全...

2019-06-26 17:17:10

Java CopyOnWriteArrayList 概述

CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。在CopyOnWriteArrayList的类图中,每个CopyOnWriteArrayList对象里面有一个array数组对象用来存放具体元素,ReentrantLock独占锁对...

2019-06-26 14:17:30
CSDN身份
  • 博客专家
奖章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。