自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员乌拉的博客!

行走在Flag与Bug之间的程序员,热爱大数据技术,崇尚开源精神!

  • 博客(116)
  • 资源 (28)
  • 收藏
  • 关注

原创 浅谈(Java)JUC线程池ScheduledThreadPoolExecutor

在很多业务场景中,可能需要周期性的运行某项任务来获取结果,比如周期数据统计,定时发送数据等。在并发包出现之前,Java 早在1.3就提供了 Timer 类(只需要了解,目前已渐渐被 ScheduledThreadPoolExecutor 代替)来适应这些业务场景。随着业务量的不断增大,可能需要多个工作线程运行任务来尽可能的增加产品性能,或者是需要更高的灵活性来控制和监控这些周期业务。这些都是 ScheduledThreadPoolExecutor 诞生的必然性。

2022-05-02 21:55:14 760 3

原创 浅谈(Java)JUC线程池ThreadPoolExecutor

从JDK 5开始,把工作单元与执行机制分离开来,工作单元包括Runnable和Callable,而执行机制由Executor框架提供。

2022-05-02 21:53:31 521

转载 浅谈(Java)JUC线程池FutureTask

Future 表示了一个任务的生命周期,是一个可取消的异步运算,可以把它看作是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对其结果的访问。在并发包中许多异步任务类都继承自Future,其中最典型的就是 FutureTask。

2022-05-02 21:51:24 369

原创 浅谈(Java)JUC集合BlokingQueue

JUC里的 BlockingQueue 接口表示一个线程安放入和提取实例的队列。

2022-05-02 21:49:38 730

原创 浅谈(Java)JUC集合ConcurrentLinkedQueue

ConcurerntLinkedQueue一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共 collection 时,ConcurrentLinkedQueue是一个恰当的选择。此队列不允许使用null元素。

2022-05-02 21:48:05 125

原创 浅谈(Java)JUC集合CopyOnWriteArrayList

CopyOnWriteArrayList实现了List接口,List接口定义了对列表的基本操作;同时实现了RandomAccess接口,表示可以随机访问(数组具有随机访问的特性);同时实现了Cloneable接口,表示可克隆;同时也实现了Serializable接口,表示可被序列化。

2022-05-02 21:46:21 131

原创 浅谈(Java)JUC集合ConcurrentHashMap

Hashtable之所以效率低下主要是因为其实现使用了synchronized关键字对put等操作进行加锁,而synchronized关键字加锁是对整个对象进行加锁,也就是说在进行put等修改Hash表的操作时,锁住了整个Hash表,从而使得其表现的效率低下。

2022-05-02 21:44:42 227

原创 浅谈(Java)JUC锁ReentrantReadWriteLock

ReentrantReadWriteLock表示可重入读写锁,ReentrantReadWriteLock中包含了两种锁,读锁ReadLock和写锁WriteLock,可以通过这两种锁实现线程间的同步。

2022-05-02 10:50:15 200

原创 浅谈(Java)JUC锁ReentrantLock

ReentrantLock实现了Lock接口,Lock接口中定义了lock与unlock相关操作,并且还存在newCondition方法,表示生成一个条件。

2022-05-01 22:27:51 146

原创 浅谈(Java)JUC锁核心类AQS

AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。当然,我们自己也能利用AQS非常轻松容易地构造出符合我们自己需求的同步器。

2022-05-01 22:26:14 128

原创 浅谈(Java)JUC锁LockSupport

LockSupport是锁中的基础,是一个提供锁机制的工具类,所以先对其进行分析。LockSupport用来创建锁和其他同步类的基本线程阻塞原语。简而言之,当调用LockSupport.park时,表示当前线程将会等待,直至获得许可,当调用LockSupport.unpark时,必须把等待获得许可的线程作为参数进行传递,好让此线程继续运行。

2022-05-01 22:24:29 142

原创 浅谈(Java)原子类CAS&Unsafe

JUC中多数类是通过volatile和CAS来实现的,CAS本质上提供的是一种无锁方案,而Synchronized和Lock是互斥锁方案; java原子类本质上使用的是CAS,而CAS底层是通过Unsafe类实现的。

2022-05-01 22:23:08 444

原创 浅谈(Java)JUC类

主要包含: (注意: 上图是网上找的图,无法表述一些继承关系,同时少了部分类;但是主体上可以看出其分类关系也够了)Lock框架和Tools类(把图中这两个放到一起理解)Collections: 并发集合Atomic: 原子类Executors: 线程池

2022-05-01 22:21:34 268

原创 详解(Java)关键字final

当某个类的整体定义为final时,就表明了你不能打算继承该类,而且也不允许别人这么做。即这个类是不能有子类的。注意:final类中的所有方法都隐式为final,因为无法覆盖他们,所以在final类中给任何方法添加final关键字是没有任何意义的。

2022-05-01 22:19:52 113

原创 详解(Java)关键字volatile

相比Sychronized(重量级锁,对系统性能影响较大),volatile提供了另一种解决可见性和有序性问题的方案。

2022-05-01 22:18:44 225

原创 详解(Java)关键字synchronized

在应用Sychronized关键字时需要把握如下注意点:一把锁只能同时被一个线程获取,没有获得锁的线程只能等待;每个实例都对应有自己的一把锁(this),不同实例之间互不影响;例外:锁对象是*.class以及synchronized修饰的是static方法的时候,所有对象公用同一把锁synchronized修饰的方法,无论方法正常执行完毕还是抛出异常,都会释放锁

2022-05-01 22:17:29 216

原创 浅谈(Java)并发线程基础

无需等待其它线程显式地唤醒,在一定时间之后会被系统自动唤醒。调用 Thread.sleep() 方法使线程进入限期等待状态时,常常用“使一个线程睡眠”进行描述。

2022-05-01 22:15:45 188

原创 浅谈(Java)并发理论基础

众所周知,CPU、内存、I/O 设备的速度是有极大差异的,为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构、操作系统、编译程序都做出了贡献,主要体现为:CPU 增加了缓存,以均衡与内存的速度差异;// 导致 可见性问题操作系统增加了进程、线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异;// 导致 原子性问题编译程序优化指令执行次序,使得缓存能够得到更加合理地利用。// 导致 有序性问题

2022-05-01 22:14:06 194

原创 浅谈(Java)NIO实现零拷贝

在 Java NIO 中的通道(Channel)就相当于操作系统的内核空间(kernel space)的缓冲区,而 缓冲区(Buffer)对应的相当于操作系统的 用户空间(user space)中的 用户缓冲区(user buffer)。

2022-04-30 21:34:32 1061

原创 浅谈(Java) N(A)IO-Netty框架

Netty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty构建,比如RPC框架、zookeeper等。

2022-04-30 21:32:45 457

原创 浅谈(Java)AIO-异步IO

阻塞式同步IO、非阻塞式同步IO、多路复用IO 这三种IO模型,以及JAVA对于这三种IO模型的支持。重点说明了IO模型是由操作系统提供支持,且这三种IO模型都是同步IO,都是采用的“应用程序不询问我,我绝不会主动通知”的方式。异步IO则是采用“订阅-通知”模式: 即应用程序向操作系统注册IO监听,然后继续做自己的事情。当操作系统发生IO事件,并且准备好数据后,在主动通知应用程序,触发相应的函数:

2022-04-30 21:31:03 1473

原创 浅谈(Java)NIO-IO多路复用

主要对IO多路复用,Ractor模型以及Java NIO对其的支持。

2022-04-30 21:29:42 268

原创 浅谈(Java)NIO通信

新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O。Standard IO是对字节流的读写,在进行IO之前,首先创建一个流对象,流对象进行读写操作都是按字节 ,一个字节一个字节的来读或写。而NIO把IO抽象成块,类似磁盘的读写,每次IO操作的单位都是一个块,块被读入内存之后就是一个byte[],NIO一次可以读或写多个字节。

2022-04-30 21:27:37 102

原创 浅谈(Java)BIO通信

BIO就是: blocking IO。最容易理解、最容易实现的IO工作方式,应用程序向操作系统请求网络IO操作,这时应用程序会一直等待;另一方面,操作系统收到请求后,也会等待,直到网络上有数据传到监听端口;操作系统在收集数据后,会把数据发送给应用程序;最后应用程序受到数据,并解除等待状态。

2022-04-30 21:25:39 1374

原创 浅谈Unix IO模型

主要简要介绍 Unix I/O 5种模型,并对5大模型比较,并重点为后续章节解释IO多路复用做铺垫。

2022-04-30 21:23:59 101

原创 浅谈(Java)IO常用类

主要介绍Java IO常见类的使用,包括:磁盘操作,字节操作,字符操作,对象操作和网络操作。

2022-04-30 21:22:40 146

原创 浅谈(Java)OutputStream源码

主要从JDK源码角度分析 OutputStream。

2022-04-30 21:21:22 201

原创 浅谈(Java)InputStream源码

主要从JDK源码角度分析InputStream。

2022-04-28 21:32:33 260

原创 浅谈(Java)IO分类

主要从传输方式和数据操作两个方面分析Java IO的分类。从数据传输方式或者说是运输方式角度看,可以将 IO 类分为:字节流字符流字节是个计算机看的,字符才是给人看的

2022-04-27 21:05:16 454

原创 浅谈(Java)WeakHashMap源码

介绍一个特殊的成员: WeakHashMap,从名字可以看出它是某种 Map。它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除,即使程序员没有调用remove()或者clear()方法。更直观的说,当使用 WeakHashMap 时,即使没有显示的添加或删除任何元素

2022-04-27 21:03:23 589

原创 浅谈(Java)TreeSet&TreeMap源码

Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator)。

2022-04-27 21:02:17 108

原创 浅谈(Java)LinkedHashSet&Map源码

LinkedHashSet和LinkedHashMap在Java里也有着相同的实现,前者仅仅是对后者做了一层包装,也就是说LinkedHashSet里面有一个LinkedHashMap(适配器模式)。因此本文将重点分析LinkedHashMap。LinkedHashMap实现了Map接口,即允许放入key为null的元素,也允许插入value为null的元素。从名字上可以看出该容器是linked list和HashMap的混合体,也就是说它同时满足HashMap和linked list的某些特性。可将L

2022-04-27 20:58:41 108

原创 浅谈(Java)HashSet&HashMap源码

HashMap实现了Map接口,即允许放入key为null的元素,也允许插入value为null的元素;除该类未实现同步外,其余跟Hashtable大致相同;跟TreeMap不同,该容器不保证元素顺序,根据需要该容器可能会对元素重新哈希,元素的顺序也会被重新打散,因此不同时间迭代同一个HashMap的顺序可能会不同。 根据对冲突的处理方式不同,哈希表有两种实现方式,一种开放地址方式(Open addressing),另一种是冲突链表方式(Separate chaining with linked lists

2022-04-27 20:57:17 102

原创 浅谈(Java)PriorityQueue源码

Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。

2022-04-27 20:55:44 144

原创 浅谈(Java)Stack&Queue源码

Java里有一个叫做Stack的类,却没有叫做Queue的类(它是个接口名字)。当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque;既然Queue只是一个接口,当需要使用队列时也就首选ArrayDeque了(次选是LinkedList)。

2022-04-27 20:54:04 147

原创 浅谈(Java)LinkedList源码

LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。这样看来,LinkedList简直就是个全能冠军。当你需要使用栈或者队列时,可以考虑使用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是,Java里根本没有一个叫做Queue的类(它是个接口名字)。关于栈或队列,现在的首选是ArrayDeque,它有着比LinkedList(当作栈或队列使用时)有着更好的性

2022-04-26 21:35:15 101

原创 浅谈(Java)ArrayList源码

ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量(capacity),表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量。当向容器中添加元素时,如果容量不足,容器会自动增大底层数组的大小。前面已经提过,Java泛型只是编译器提供的语法糖,所以这里的数组是一个Object数组,以便能够容纳任何类型的对象。

2022-04-26 21:33:58 89

原创 浅谈java容器

Java容器里只能放对象,对于基本类型(int, long, float, double等),需要将其包装成对象类型后(Integer, Long, Float, Double等)才能放到容器里。很多时候拆包装和解包装能够自动完成。这虽然会导致额外的性能和空间开销,但简化了设计和编程。

2022-04-26 21:31:39 100

原创 浅谈java SPI机制

SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。

2022-04-26 21:30:07 108

原创 浅谈java反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制在框架设计中极为广泛,需要深入理解。

2022-04-26 21:28:45 646

20_填充节点指针.pdf

20_填充节点指针.pdf

2022-03-19

19_二叉树展开为链表.pdf

19_二叉树展开为链表.pdf

2022-03-19

18_路径总和||.pdf

18_路径总和||.pdf

2022-03-19

17_路径总和.pdf

17_路径总和.pdf

2022-03-19

16_二叉树的最小深度.pdf

16_二叉树的最小深度.pdf

2022-03-19

15_平衡二叉树.pdf

15_平衡二叉树.pdf

2022-03-19

算法笔记,有序链表转为二叉搜索树

算法笔记,有序链表转为二叉搜索树

2022-03-19

算法笔记,将有序数组转为二叉搜索树

算法笔记,将有序数组转为二叉搜索树

2022-03-19

算法笔记,二叉树的层序遍历||

算法笔记,二叉树的层序遍历||

2022-03-19

算法笔记,中需与后序遍历构造二叉树

算法笔记,中需与后序遍历构造二叉树

2022-03-19

算法笔记,前序与中序遍历构造二叉树

算法笔记,前序与中序遍历构造二叉树

2022-03-19

算法笔记,二叉树的最大深度

算法笔记,二叉树的最大深度

2022-03-19

算法笔记,二叉树的锯齿型层次遍历

算法笔记,二叉树的锯齿型层次遍历

2022-03-19

算法笔记,二叉树的后序遍历

算法笔记,二叉树的后序遍历

2022-03-19

算法笔记,解析对称二叉树

算法笔记,解析对称二叉树

2022-03-19

算法笔记,相同的树解析

算法笔记,相同的树解析

2022-03-19

算法笔记,恢复二叉搜索树

算法笔记,恢复二叉搜索树

2022-03-19

算法笔记,验证二叉搜索树

算法笔记,验证二叉搜索树

2022-03-19

算法笔记,不同的二叉搜索树

算法笔记,不同的二叉搜索树

2022-03-19

算法笔记,二叉树的中序遍历

算法笔记,二叉树的中序遍历

2022-03-19

(数据结构)第8章 排序技术.pdf

超详细数据结构!

2021-06-18

(数据结构)第7章 查找技术.pdf

超详细数据结构!

2021-06-18

(数据结构)第6章 图.pdf

超详细数据结构!

2021-06-18

(数据结构)第5章 树和二叉树.pdf

超详细数据结构

2021-06-18

(数据结构)第4章 字符串和多维数组.pdf

超详细数据结构!

2021-06-18

(数据结构)第3章 栈和队列.pdf

超详细数据结构!

2021-06-18

(数据结构)第2章 线性表.pdf

超详细数据结构!

2021-06-18

(数据结构)第1章 绪论.pdf

超详细的数据结构!看完,别再说不会了!

2021-06-18

空空如也

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

TA关注的人

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