Java编程的逻辑.
文章平均质量分 91
一些 抄书
norang
这个作者很懒,什么都没留下…
展开
-
Java 并发总结 线程的协作机制
这里写目录标题20.2 线程的协作机制(1)wait/notify(2)显式条件(3)线程的中断(4)协作工具类(5)阻塞队列(6)Future/FutureTask参考目录20.2 线程的协作机制 多线程之间的核心问题,除了竞争,就是协作。我们在15.3节介绍 了多种协作场景,比如生产者/消费者协作模式、主从协作模式、同时 开始、集合点等。之前章节探讨了协作的多种机制: &原创 2021-11-08 10:12:54 · 411 阅读 · 0 评论 -
Java 并发总结 线程安全的机制
这里写目录标题20.1 线程安全的机制(1)synchronized(2)显式锁(3)volatile(4)原子变量和CAS(5)写时复制(6)ThreadLocal参考目录20.1 线程安全的机制 线程表示一条单独的执行流,每个线程有自己的执行计数器,有自己的栈,但可以共享内存,共享内存是实现线程协作的基础,但共享内存有两个问题,竞态条件和内存可见性,之前章节探讨了解决这些问题的多种思路: &nb原创 2021-11-08 09:16:13 · 3019 阅读 · 0 评论 -
Java 异步任务执行服务 定时任务的那些陷阱
这里写目录标题18.3 定时任务的那些陷阱18.3.1 Timer和TimerTask1.基本用法2.基本示例3.基本原理4.死循环5.异常处理6.小结18.3.2 ScheduledExecutorService1.基本用法2.基本示例3.基本原理18.3.3 小结参考目录18.3 定时任务的那些陷阱 本节探讨定时任务,定时任务的应用场景是非常多的,比如: ·闹原创 2021-11-04 17:44:48 · 1365 阅读 · 0 评论 -
Java 异步任务执行服务 线程池
这里写目录标题18.2 线程池18.2.1 理解线程池1.线程池大小2.队列3.任务拒绝策略4.线程工厂5.关于核心线程的特殊配置18.2.2 工厂类Executors18.2.3 线程池的死锁18.2.4 小结参考目录18.2 线程池 线程池是并发程序中一个非常重要的概念和技术。 线程池,顾名思义,就是一个线程的池子,里面有若干线程,它们的目的就是执行提 交给线程池的任务,执行完一个任务后不会退出,而是继续等待或执行 新任务。线程池原创 2021-11-04 14:39:15 · 893 阅读 · 0 评论 -
Java 异步任务执行服务 基本概念和原理
这里写目录标题18.1 基本概念和原理18.1.1 基本接口18.1.2 基本用法18.1.3 基本实现原理1.AbstractExecutorService2.FutureTask18.1.4 小结参考目录18.1 基本概念和原理 下面,我们来看异步任务执行服务的基本接口、用法和实现原理。18.1.1 基本接口 首先,我们来看任务执行服务涉及的基本接口:&n原创 2021-11-03 15:55:24 · 1777 阅读 · 0 评论 -
Java 同步和协作工具类 循环栅栏CyclicBarrier
这里写目录标题19.4 循环栅栏CyclicBarrier参考目录19.4 循环栅栏CyclicBarrier 我们在15.3.7节使用wait/notify实现了一个简单的集合点 AssemblePoint,我们提到,Java并发包中已经提供了类似工具,就是 CyclicBarrier。它相当于是一个栅栏,所有线程在到达该栅栏后都需要等待其他线程,等所有线程都到达后再一起通过,它是循环的,可以用作重复的同步。  原创 2021-11-02 10:51:11 · 262 阅读 · 0 评论 -
Java 同步和协作工具类 倒计时门栓CountDownLatch
这里写目录标题19.3 倒计时门栓CountDownLatch参考目录19.3 倒计时门栓CountDownLatch 我们在15.3.5节使用wait/notify实现了一个简单的门栓MyLatch,我 们提到,Java并发包中已经提供了类似工具,就是CountDownLatch。它相当于是一个门栓,一开始是关闭的,所有希望通过该门的线程都需要等待,然后开始倒计时,倒计时变为0后,门栓打开,等待的所有线程 都可以通过,它是一次性的,原创 2021-11-02 10:09:24 · 352 阅读 · 0 评论 -
Java 同步和协作工具类 信号量Semaphore
这里写目录标题19.2 信号量Semaphore参考目录19.2 信号量Semaphore 之前介绍的锁都是限制只有一个线程可以同时访问一个资源。现实中,资源往往有多个,但每个同时只能被一个线程访问,比如,饭店的饭桌、火车上的卫生间。有的单个资源即使可以被并发访问,但并发访问数多了可能影响性能,所以希望限制并发访问的线程数。还有的情况,与软件的授权和计费有关,对不同等级的账户,限制不同的最大并发访问数。 &nb原创 2021-11-02 09:49:51 · 254 阅读 · 0 评论 -
Java 同步和协作工具类 读写锁ReentrantReadWriteLock
这里写目录标题19.1 读写锁ReentrantReadWriteLock参考目录19.1 读写锁ReentrantReadWriteLock 之前章节我们介绍了两种锁:synchronized和显式锁 ReentrantLock,对于同一受保护对象的访问,无论是读还是写,它们都 要求获得相同的锁。在一些场景中,这是没有必要的,多个线程的读操作完全可以并行,在读多写少的场景中,让读操作并行可以明显提高性能。 &原创 2021-11-01 17:49:59 · 261 阅读 · 0 评论 -
Java 并发包的基石 显式条件
这里写目录标题16.3 显式条件16.3.1 用法16.3.2 生产者/消费者模式16.3.3 实现原理16.3.4 小结参考目录16.3 显式条件 16.2节我们介绍了显式锁,本节介绍关联的显式条件,介绍其用法和原理。显式条件在不同上下文中也可以被称为条件变量、条件队列、 或条件,后文我们可能会交替使用。16.3.1 用法 锁用于解决竞态条件问题,条件是线程间原创 2021-11-01 17:02:49 · 231 阅读 · 0 评论 -
Java 并发包的基石 显式锁
16.2 显式锁 15.2节介绍了利用synchronized实现锁,我们提到了synchronized的 一些局限性,本节探讨Java并发包中的显式锁,它可以解决synchronized 的限制。 Java并发包中的显式锁接口和类位于包java.util.concurrent.locks下, 主要接口和类有: &nb原创 2021-11-01 14:58:31 · 242 阅读 · 0 评论 -
Java 泛型 -- 类型参数式、通配符式、细节和局限性
8.1 基本概念和原理之前我们一直强调数据类型的概念,Java有8种基本类型,可以定 义类,类相当于自定义数据类型,类之间还可以有组合和继承。我们也 介绍了接口,其中提到,很多时候我们关心的不是类型,而是能力,针 对接口和能力编程,不仅可以复用代码,还可以降低耦合,提高灵活 性。泛型将接口的概念进一步延伸,“泛型”的字面意思就是广泛的类 型。类、接口和方法代码可以应用于非常广泛的类型,代码与它们能够 操作的数据类型不再绑定在一起,同一套代码可以用于多种数据类型, 这样,不仅可以复用代码,降低耦合,而且可原创 2021-09-26 12:36:04 · 1121 阅读 · 0 评论 -
Java Map和Set 剖析HashSet
这里写目录标题10.2 剖析HashSet10.2.1 用法10.2.2 实现原理10.2.3 小结参考目录10.2 剖析HashSet 10.1节提到了Set接口,Map接口的两个方法keySet和entrySet返回的 都是Set,本节介绍Set接口的一个重要实现类HashSet。与HashMap类 似,字面上看,HashSet由两个单词组成:Hash和Set。其中,Set表示接口,实现Set接口也有多种方原创 2021-08-10 17:17:34 · 168 阅读 · 0 评论 -
java 数组的创建 与 赋值
1.2.2 数组类型 基本类型的数组有3种赋值形式,如下所示: 第1种和第2种都是预先知道数组的内容,而第3种是先分配长度, 然后再给每个元素赋值。第3种形式中,即使没有给每个元素赋值,每个元素也都有一个默认值,这个默认值跟数组类型有关,数值类型的值 为0,boolean为false,char为空字符。原创 2021-07-30 16:07:24 · 3158 阅读 · 0 评论 -
java 并发包的基石 原子变量和CAS
这里写目录标题16.1 原子变量和CAS16.1.1 AtomicInteger1.基本用法2.基本原理和思维3.实现锁16.1.2 ABA问题16.1.3 小结参考目录16.1 原子变量和CAS 什么是原子变量?为什么需要它们呢?我们从synchronized说起。 在15.2节,我们介绍过Counter类,使用synchronized关键字保证原子更 新操作,代码如下:  原创 2021-06-25 00:11:42 · 170 阅读 · 1 评论 -
java 线程的中断
这里写目录标题15.4 线程的中断15.4.1 取消/关闭的场景15.4.2 取消/关闭的机制15.4.3 线程对中断的反应1.RUNNABLE2.WAITING/TIMED_WAITING3.BLOCKED4.NEW/TERMINATE15.4.4 如何正确地取消/关闭线程15.4.5 小结参考目录15.4 线程的中断 本节主要讨论一个问题,如何在Java中取消或关闭一个线程?我们 先介绍都有哪些场景需要取消/关闭线程,原创 2021-06-23 23:21:55 · 445 阅读 · 1 评论 -
java 线程的基本协作机制
这里写目录标题15.3 线程的基本协作机制15.3.1 协作的场景15.3.2 wait/notify15.3.3 生产者/消费者模式15.3.4 同时开始15.3.5 等待结束15.3.6 异步结果15.3.7 集合点15.3.8 小结参考目录15.3 线程的基本协作机制 多线程之间除了竞争访问同一个资源外,也经常需要相互协作,怎 么协作呢?本节就来介绍Java中多线程协作的基本机制wait/notify。原创 2021-06-23 17:42:26 · 370 阅读 · 0 评论 -
java 理解synchronized
15.2 理解synchronized上一节,我们提到,共享内存有两个重要问题,一个是竞态条件, 另一个是内存可见性,解决这两个问题的一个方案是使用synchronized 关键字,本节就来讨论这个关键字。我们先来了解synchronized的用法 和基本原理,然后再从多个角度进一步理解,最后介绍使用 synchronized实现的同步容器及其注意事项。15.2.1 用法和基本原理synchronized可以用于修饰类的实例方法、静态方法和代码块,我们分别介绍。1.实例方法上节我们介绍了一个计数的原创 2021-06-23 11:32:28 · 392 阅读 · 0 评论 -
java 线程的基本概念
这里写目录标题15.1 线程的基本概念15.1.1 创建线程1.继承Thread2.实现Runnable接口15.1.2 线程的基本属性和方法1.id和name2.优先级3.状态4.是否daemon线程5.sleep方法6.yield方法7.join方法8.过时方法15.1.3 共享内存及可能存在的问题1.竞态条件2.内存可见性15.1.4 线程的优点及成本参考目录15.1 线程的基本概念 本节,我们介绍Java中线程的一原创 2021-06-22 20:05:13 · 260 阅读 · 0 评论 -
Java 静态/动态代理----AOP的实现
第23章 动态代理本章,我们来探讨Java中另外一个动态特性:动态代理。动态代理是一种强大的功能,它可以在运行时动态创建一个类,实现一个或多个接口,可以在不修改原有类的基础上动态为通过该类获取的对象添加方 法、修改行为,这么描述比较抽象,下文会具体介绍。这些特性使得它广泛应用于各种系统程序、框架和库中,比如Spring、Hibernate、 MyBatis、Guice等。动态代理是实现面向切面的编程AOP(Aspect Oriented Programming)的基础。切面的例子有日志、性能监控、权限检原创 2021-06-20 16:25:53 · 701 阅读 · 0 评论 -
Java 反射 Class类----应用示例-----反射与泛型
这里写目录标题21.1 Class类1.名称信息2.字段信息3.方法信息4.创建对象和构造方法5.类型检查和转换6.Class的类型信息7.类的声明信息8.类的加载9.反射与数组10.反射与枚举21.2 应用示例21.3 反射与泛型参考目录21.1 Class类 在介绍类和继承的实现原理时,我们提到,每个已加载的类在内存都有一份类信息,每个对象都有指向它所属类信息的引用。Java中,类 信息对应的类原创 2021-05-09 13:09:40 · 374 阅读 · 0 评论 -
Java 文件高级技术 使用Jackson序列化为JSON/XML/MessagePack
14.5 使用Jackson序列化为 JSON/XML/MessagePack 由于Java标准序列化机制的一些限制,实践中经常使用一些替代方 案,比如XML/JSON/MessagePack。Java SDK中对这些格式的支持有限,有很多第三方的类库提供了更为方便的支持,Jackson是其中一种, 它支持多种格式,包括XML/JSON/MessagePack等,本节就来介绍如何使用Jackson进行原创 2021-05-07 00:14:34 · 618 阅读 · 1 评论 -
Java 文件基本技术 文件概述
这里写目录标题13.1 文件概述13.1.1 基本概念和常识1.二进制思维2.文件类型3.文本文件的编码4.文件系统5.文件读写13.1.2 Java文件概述1.流2.装饰器设计模式3.Reader/Writer4.随机读写文件5.File6.NIO7.序列化和反序列化参考目录13.1 文件概述 在本节,我们主要介绍文件有关的一些基本概念和常识,Java中处 理文件的基本思路和类结构,以及接下来的章原创 2021-05-01 19:48:58 · 640 阅读 · 1 评论 -
Java中的 异常、异常类、异常处理、如何使用异常
这里写目录标题第6章 异常6.1 初识异常6.1.1 NullPointerException(空指针异常)6.1.2 NumberFormatException(数字格式异常)6.2 异常类6.2.1 Throwable6.2.2 异常类体系6.2.3 自定义异常6.3 异常处理6.3.1 catch匹配6.3.2 重新抛出异常6.3.3 finally6.3.4 try-with-resources6.3.5 throws6.3.6 对比受检和未受检异常6.4 如何使用异常6.4.1 异常应该且仅用于异原创 2021-04-15 12:34:43 · 560 阅读 · 0 评论 -
Java 同步和协作工具类 理解ThreadLocal
这里写目录标题19.5 理解ThreadLocal19.5.1 基本概念和用法19.5.2 使用场景1.日期处理2.随机数3.上下文信息19.5.3 基本实现原理参考目录19.5 理解ThreadLocal 本节,我们来探讨一个特殊的概念:线程本地变量。在Java中的实现是类ThreadLocal,它是什么?有什么用?实现原理是什么?让我们接 下来逐步探讨。19.5.1 基本概念和用法  原创 2021-05-09 17:14:38 · 201 阅读 · 0 评论 -
Java 列表和队列 剖析ArrayList
这里写目录标题声明9.1 剖析ArrayList9.1.1 基本用法9.1.2 基本原理9.1.3 迭代1.迭代器接口2.ListIterator3.迭代的陷阱4.迭代器实现的原理5.迭代器的好处9.1.4 ArrayList实现的接口1.Collection2.List3.RandomAccess9.1.5 ArrayList的其他方法9.1.6 ArrayList特点分析9.1.7 小结参考目录声明 本书作原创 2021-04-26 20:28:29 · 283 阅读 · 0 评论 -
Java 文件基本技术 文本文件和字符流
这里写目录标题声明13.3 文本文件和字符流13.3.1 基本概念1.文本文件2.编码3.字符流13.3.2 Reader/Writer13.3.3 InputStreamReader/OutputStreamWriter1.OutputStreamWriter2.InputStreamReader13.3.4 FileReader/FileWriter13.3.5 CharArrayReader/CharArrayWriter13.3.6 StringReader/StringWriter13.3.7 B原创 2021-05-03 12:02:56 · 328 阅读 · 2 评论 -
Java 文件高级技术 常见文件类型处理
这里写目录标题14.1 常见文件类型处理14.1.1 属性文件14.1.2 CSV文件14.1.3 Excel14.1.4 HTML14.1.5 压缩文件参考目录14.1 常见文件类型处理 本节简要介绍如何利用Java API和一些第三方类库,来处理如下5种 类型的文件: 1)属性文件:属性文件是常见的配置文件,用于原创 2021-05-05 17:40:02 · 806 阅读 · 0 评论 -
Java 文件基本技术 文件和目录操作
这里写目录标题13.4 文件和目录操作13.4.1 构造方法13.4.2 文件元数据13.4.3 文件操作13.4.4 目录操作参考目录13.4 文件和目录操作 文件和目录操作最终是与操作系统和文件系统相关的,不同系统的 实现是不一样的,但Java中的java.io.File类提供了统一的接口,底层会 通过本地方法调用操作系统和文件系统的具体实现,本节,我们就来介 绍File类。File类中的操作大概可以分为三类:文件元数原创 2021-05-03 15:54:34 · 1133 阅读 · 3 评论 -
Java 字符的 编码 与 乱码 和恢复
这里写目录标题常见非Unicode编码1.ASCII2.ISO 8859-13.Windows-12524.GB23125.GBK6.GB180307.Big58.编码汇总2.3.2 Unicode编码1.UTF-322.UTF-163.UTF-84.Unicode编码小结2.3.3 编码转换2.3.4 乱码的原因1.解析错误2.错误的解析和编码转换2.3.5 从乱码中恢复1.使用UltraEdit2.使用Java时间之外的内容大小端模式编码有两大类:一类是非 Unicode编码;另一类是Unicode编原创 2021-03-22 23:35:31 · 1694 阅读 · 0 评论 -
Java 文件基本技术 二进制文件和字节流
这里写目录标题13.2 二进制文件和字节流13.2.1 InputStream/OutputStream1.InputStream2.OutputStream13.2.2 FileInputStream/FileOutputStream1.FileOutputStream2.FileInputStream13.2.3 ByteArrayInputStream/ByteArrayOutputStream1.ByteArrayOutputStream2.ByteArrayInputStream13.2.4 Da原创 2021-05-03 08:55:38 · 3407 阅读 · 0 评论 -
Java 常用基本类 剖析Arrays
这里写目录标题7.4 剖析Arrays7.4.1 用法1.toString2.排序3.查找4.更多方法7.4.2 多维数组7.4.3 实现原理1.二分查找2.排序7.4.4 小结参考目录7.4 剖析Arrays 数组是存储多个同类型元素的基本数据结构,数组中的元素在内存 连续存放,可以通过数组下标直接定位任意元素,相比在后续章节介绍 的其他容器而言效率非常高。 &原创 2021-04-22 13:53:20 · 292 阅读 · 0 评论 -
Java 常用基本类 剖析String
这里写目录标题声明7.2 剖析String7.2.1 基本用法7.2.2 走进String内部7.2.3 编码转换7.2.4 不可变性7.2.5 常量字符串7.2.6 hashCode7.2.7 正则表达式参考目录声明 本书作者的关于String 的源码很大部分来源于,jdk7的源代码,最明显的就是,现在的String 类内部存储的是byte数组,而不是char数组以及相关方法的改动,但是,整体性的运作思想和思原创 2021-04-21 23:18:39 · 132 阅读 · 0 评论 -
Java 文件高级技术 标准序列化机制
这里写目录标题14.4 标准序列化机制14.4.1 基本用法14.4.2 复杂对象14.4.3 定制序列化14.4.4 序列化的基本原理14.4.5 版本问题14.4.6 序列化特点分析参考目录14.4 标准序列化机制 在前面几节,我们在将对象保存到文件时,使用的是 DataOutputStream,从文件读入对象时,使用的是DataInputStream,使用它们,需要逐个处理对象中的每个字段,我们提到,这种原创 2021-05-06 11:16:32 · 187 阅读 · 0 评论 -
Java 列表和队列 剖析LinkedList
这里写目录标题声明9.2 剖析LinkedList9.2.1 用法9.2.2 实现原理1.内部组成2.add方法3.根据索引访问元素get4.根据内容查找元素5.插入元素6.删除元素9.2.3 LinkedList特点分析参考目录声明 本书作者的关于ArrayList 的源码很大部分来源于,jdk7的源代码,但是,整体性的运作思想和思路大体上是没有变化的。9.2 剖析LinkedList &nbs原创 2021-04-27 22:30:03 · 506 阅读 · 0 评论 -
Java 常用基本类 剖析日期和时间(Java8以前)
这里写目录标题声明7.5 剖析日期和时间7.5.1 基本概念1.时区2.时刻和纪元时3.年历7.5.2 日期和时间API1.Date2.TimeZone3.Locale4.Calendar5.DateFormat6.SimpleDateFormat7.5.3 局限性1.Date中的过时方法2.Calendar操作比较烦琐3.DateFormat的线程安全性参考目录声明 本书作者的关于此章节的内容的相关时间的AP原创 2021-04-24 01:18:10 · 298 阅读 · 0 评论 -
Java 常用基本类 剖析StringBuilder
这里写目录标题声明7.3 剖析StringBuilder7.3.1 基本用法7.3.2 基本实现原理7.3.3 String的+和+=运算符参考目录声明 本书作者的关于StringBuilder 的源码很大部分来源于,jdk7的源代码,最明显的就是,现在的StringBuilder 类内部存储的是byte数组,而不是char数组以及相关方法的改动,但是,整体性的运作思想和思路大体上是没有变化的。7.3 剖析S原创 2021-04-22 00:02:07 · 242 阅读 · 2 评论 -
Java 内部类的本质
5.3 内部类的本质 之前我们所说的类都对应于一个独立的Java源文件,但一个类还可 以放在另一个类的内部,称之为内部类,相对而言,包含它的类称之为 外部类 。 一般而言,内部类与包含它的外部类有比较密切的关系,而与其他 类关系不大,定义在类内部,可以实现对外部完全隐藏,可以有更好的 封装性,代原创 2021-04-10 23:08:03 · 325 阅读 · 0 评论 -
Java 中 继承实现的基本原理 与 类的加载 与 对象创建的过程
4.3 继承实现的基本原理 本节通过一个例子来介绍继承实现的基本原理。需要说明的是,本 节主要从概念上来介绍原理,实际实现细节可能与此不同。4.3.1 示例 基类Base如代码清单4-7所示。 代码清单4-7 演示继承原理原创 2021-04-12 00:22:41 · 279 阅读 · 0 评论 -
Java 注解的创建及应用
22.1 内置注解Java内置了一些常用注解:@Override、@Deprecated、 @SuppressWarnings,我们简要介绍。1.@Override@Override修饰一个方法,表示该方法不是当前类首先声明的,而 是在某个父类或实现的接口中声明的,当前类“重写”了该方法,比如:Child的action方法重写了父类Base中的action方法,toString方法重 写了Object类中的toString方法。这个注解不写也不会改变这些方法 是“重写”的本质,那有什么用呢?它可以原创 2021-05-08 15:20:32 · 604 阅读 · 0 评论