![](https://img-blog.csdnimg.cn/20210326141248867.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 94
Java技术
炸了毛的猫
路虽远,行则将至。事虽难,做则必成。
不积跬步,无以至千里,不积小流,无以成江海。
展开
-
JAVA系列:NIO
先来看一下NIO的工作流程图:缓冲区的作用就是作为运输数据的载体,在通道中进行运输,是在内存中进行的,本质其实就是数组。JAVA NIO包内声明了常见的几种数据类型的实现。2.2、基本使用编写一个输出方法:使用完整示例上面代码的输出顺序以及解释:初始化数据并插入 方法进行初始化buffer数组大小。初始值与相等,随着插入数据后移。flip操作转换为读取模式,重置为,为0。 方法比较的是是否小于,表示是否读取结束。随着方法读取,后移,直到与相等,读取完毕。rewind操作重现读取,把原创 2024-05-29 11:04:29 · 1123 阅读 · 0 评论 -
JAVA系列:IO流
1、字节流是原生的操作,字符流是处理之后的操作。和Reader的子类。和Writer的子类。原创 2024-05-10 08:47:54 · 845 阅读 · 1 评论 -
JUC之十一:CompletableFuture用法详解
前面介绍了FutureTask,获取异步执行结果通过get的形式,而且会阻塞主线程,随着开发的越来越越复杂已经无法满足真正开发场景,我们试想一个例子:我们再炒菜的时候,先洗菜,切菜,炒菜,盛菜,然后吃。。。。。。如果还用原来的future来操作的话,需要每一个步骤get出前一个线程的结果之后才能继续执行,导致主线程阻塞,无法去干别的事情,如蒸米饭等,为了解决这一问题提出了的异步编程方式。原创 2023-07-10 11:12:19 · 1257 阅读 · 0 评论 -
JUC之十:ForkJoinPool任务分割与等待
JUC之十:ForkJoinPool任务分割与等待原创 2022-11-04 09:25:41 · 737 阅读 · 0 评论 -
JUC之九:ForkJoinPool主流程解析
JUC源码分析之ForkJoinPool主流程分析原创 2022-11-01 15:29:59 · 253 阅读 · 0 评论 -
JAVA 8: Stream流方法
JAVA 8 Stream流方法原创 2022-08-25 09:43:55 · 214 阅读 · 0 评论 -
JAVA8:Collector集合方法
Collector集合方法原创 2022-08-23 21:59:56 · 387 阅读 · 1 评论 -
四大线程池简析
线程池简析原创 2022-07-25 16:44:10 · 286 阅读 · 0 评论 -
ThreadLocal解析
文章目录前言1、类定义1.1、成员变量#2、方法解析2.1、get方法解析2.2、set和remove方法解析2.3、父子线程3、ThreadLocalMap静态内部类解析3.1、成员变量3.2、构造方法3.2.1、构造方法一3.2.2、构造方法二3.3、getEntry方法解析3.3、getEntryAfterMiss方法解析3.3、expungeStaleEntry方法解析3.4、set方法解析3.5、replaceStaleEntry方法解析3.6、cleanSomeSlots方法解析3.7、remo原创 2022-03-21 19:28:49 · 546 阅读 · 0 评论 -
JUC之八:FutureTask源码解析 JDK8
文章目录前言1、FutureTask结构1.1、继承结构1.2、构造方法1.3、状态1.4、消费者链表1.5、成员属性2、实现Runnable接口的run方法3、Future接口方法(get等)3.1、get方法3.2、cancel、isCancelled4、总结前言我们知道线程Runnable接口是无法获取线程执行的返回值的,需要用另一个接口Callable接口是可以获取线程返回值的。区别:Runnable接口没有返回值,Callable接口有返回值。又因为是返回值是泛型,所以任何类型的返回原创 2022-03-11 17:55:17 · 2821 阅读 · 0 评论 -
JUC之七:ReentrantReadWriteLock源码解读JDK8
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可原创 2022-03-10 11:25:31 · 273 阅读 · 0 评论 -
JUC之六:Condition接口的实现(ReentrantLock.Condition代码解析)
文章目录前言前言一个新设计的出现,总是为了替换现有的略有不足的设计。而Condition接口的出现,是为了代替监视器锁的wait/notify机制,提供更强大的功能。我们将Object自带的wait/notify方法与Condition接口提供的await/signal进行一个对比。Object方法Condition方法区别void wait()void await()void wait(long timeout)long awaitNanos(long nano原创 2022-03-08 17:33:58 · 341 阅读 · 0 评论 -
JUC之五:AQS共享锁的获取和释放(Semaphore代码解析)
文章目录共享锁与独占锁的区别Semaphore内部类共享锁的获取setHeadAndPropagate执行doReleaseShared的条件共享锁的释放同时执行doReleaseShared总结共享锁与独占锁的区别共享锁在同一时刻多个线程占有锁,独占锁同一时刻只能有一个线程占有锁,并把线程放在exclusiveOwnerThread成员上。共享锁与独占锁都需要被唤醒。共享锁唤醒线程有两种方式: 1、在唤醒线程的同时,该线程也会尝试唤醒后面的线程(在setHeadAndPropagate方法原创 2022-03-05 16:28:44 · 667 阅读 · 0 评论 -
JUC之四:AQS独占锁的释放过程(release代码解析)
文章目录前言releasetryReleaseunparkSuccessor线程在哪被唤醒前言在上一篇文章分析独占锁的获取过程中,我们分析了独占锁的获取过程。相对于获取过程,独占锁的释放过程则相对简单了很多。Lock lock = new ReentrantLock();...lock.lock();try { // 搞事情} finally { lock.unlock();}对于ReentrantLock的使用,一定要注意将unlock操作写在finally块里,原创 2022-03-03 17:29:14 · 312 阅读 · 0 评论 -
JUC之三:AQS独占锁的获取过程(含ReentrantLock代码分析)
文章目录前言AQS核心stat双向队列(等待队列)CASReentrantLock内部类公平锁、非公平锁、独占锁的获取tryAcquireaddWaiterenq前言 AQS(AbstractQueuedSynchronizer)是整个JUC并发框架的基础,其实现大量依赖了乐观锁(CAS+自旋)的方式,而获取锁/释放锁同步器状态则依靠子类实现。若子类未实现方法,而调用了则会抛出异常。核心思想: 如果被请求的共享资源空闲,则将请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态。如原创 2022-03-03 16:56:49 · 180 阅读 · 0 评论 -
JUC之二:LockSupport代码解析
系列文章目录文章目录系列文章目录类的属性类的构造函数核心方法park函数parkNanos函数parkUntil函数unpark函数LockSupport示例说明使用wait/notify实现线程同步使用park/unpark实现线程同步深入理解Thread.sleep()和Object.wait()的区别Thread.sleep()和Condition.await()的区别Thread.sleep()和LockSupport.park()的区别Object.wait()和LockSupport.park原创 2022-02-24 10:04:33 · 83 阅读 · 0 评论 -
JUC之一:常用类汇总
系列文章目录文章目录系列文章目录前言Condition接口Lock 接口ReadWriteLock接口抽象类: AbstractOwnableSynchronizer核心抽象类(int):AbstractQueuedSynchonizer锁常用类: LockSupport锁常用类: ReentrantLock锁常用类: ReentrantReadWriteLock前言java.util.concurrent主要包含一下类:Lock框架和Tools类(把图中这两个放到一起理解)Collecti原创 2022-02-24 09:47:51 · 415 阅读 · 0 评论 -
java锁的分类
系列文章目录文章目录系列文章目录公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。公平锁/非公平锁公平锁: 是指多个线程按照申请锁的顺序来获取锁。非公平锁: 是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。对于Java ReentrantLock而言,原创 2022-02-22 17:03:26 · 354 阅读 · 0 评论 -
HashMap内部类红黑树TreeNode方法解析
系列文章目录文章目录系列文章目录一、红黑树二、构造方法三、moveRootToFront方法解析四、find方法解析五、比较方法5.1、comparableClassFor方法5.2、compareComparables方法解析5.3、tieBreakOrder方法解析六、树化和反树化(treeify和untreeify)6.1、treeify(树化)6.2、untreeify(反树化)七、左、右旋转7.1、rotateLeft(左旋)7.2、rotateRight(右旋)八、split解析九、putTr原创 2021-12-22 17:31:23 · 556 阅读 · 0 评论 -
HashMap方法详解(jdk1.8之后)
系列文章目录文章目录系列文章目录一、put方法1.1代码块一:put1.2代码块二:putVal一、put方法流程图如下所示:1.1代码块一:put public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }1.2代码块二:putVal final V putVal(int hash, K key, V value, boolean onlyIfAbs原创 2021-11-05 16:25:40 · 438 阅读 · 0 评论 -
反射机制
原文地址文章目录1、什么是反射2、反射原理3、反射的优缺点4、反射用途5、反射常用的类6、反射的基本使用获得class的主要的三种方法判断是否是某个对象的实例创建实例的方法通过反射获取构造方法获取成员变量并调用获取成员方法并调用反射main方法利用反射创建数值反射方法的其他使用--通过反射运行配置文件内容反射方法的其他使用--通过反射越过泛型检查1、什么是反射Java反射机制的核心,是程序在运行期间动态加载类并获取类的详细信息,进而操作类的方法和属性。本质是JVM得到class对象之后,再通过c原创 2021-05-27 15:30:21 · 67 阅读 · 0 评论 -
多线程学习笔记
学习地址一、多线程基础1、进程在计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程。 某些进程内部还需要同时执行多个子任务。例如,我们在使用Word时,Word可以让我们一边打字,一边进行拼写检查,同时还可以在后台进行打印,我们把子任务称为线程。进程和线程的关系就是:一个进程可以包含一个或多个线程,但至少会有一个线程。某些进程内部还需要同时执行多个子任务。例如,我们在使用Word时,Word可以让我们一边打字,一边进行拼原创 2021-02-03 15:16:12 · 176 阅读 · 0 评论 -
Stream流学习
什么是流(Stream)是数据渠道,用于数据操作数据源(数组集合等等)所生成的元素序列。Stream 自己不会存储元素Stream 不会改变源对象。操作延迟。操作过程● 创建Stream一个数据源(集合、数组)获取一个流● 中间操作中间操作对数据进行处理(过滤等操作)● 终止操作产生结果的操作(如Sys.out.Prilntly)创建流的几种方法/*** 创建流*/@Testpublic void test01(){ /** * 集合流 * -原创 2020-10-13 21:07:56 · 127 阅读 · 1 评论 -
Lambda学习
lambda介绍Lambda是一个匿名函数,可以理解为一段可以传递的代码(将代码像数据一样传递);可以写出更简洁、更灵活的代码;作为一种更紧凑的代码风格,是Java语言表达能力得到提升。基础语法- 操作符:->- 左侧:参数列表- 右侧:执行代码块 / Lambda 体函数式接口函数式接口参数类型返回值类型用途Consumer消费型接口Tvoid对类型为T的对象应用操作:void accept(T t)Supplier提供型接口无void返回类原创 2020-10-13 20:18:09 · 160 阅读 · 0 评论