
【Java】
文章平均质量分 57
fanfan4569
登上山顶,欣喜掩盖疼痛。
展开
-
【Java】之 守护线程(Daemon Thread)
文章目录一、简介(1)问题1. 什么时候使用守护线程?2. 有哪些常见的守护线程?3. 如何设置守护线程?4. 为什么少使用守护线程?二、案例一、简介线程可以分为:普通线程 和 守护线程普通线程和守护线程之间的差异在于:当线程退出时发生的操作。(1)问题1. 什么时候使用守护线程?希望创建一个线程来执行一些辅助工作,但又不希望这个线程阻碍 JVM 的关闭2. 有哪些常见...原创 2019-10-03 17:42:53 · 366 阅读 · 0 评论 -
【Java】 之 ThreadPoolExecutor 使用案例
文章目录一、自定义`ThreadFactory`二、自定义`RejectedExecutionHandler`三、测试四、源码Executors 中默认的线程工厂和拒绝策略过于简单,通常对用户不够友好一、自定义ThreadFactory对线程池创建的线程必须明确标识,为线程本身指定有意义的名称和相应的序号。显示调用来源、线程的业务含义,有助于快速定位到死锁、StackOverfl...原创 2019-09-14 14:59:15 · 6327 阅读 · 1 评论 -
【Java】之 Executor
文章目录一、`Executor` 简介(1)`Executors.WorkStealingPool`(2)`Executors.newCachedThreadPool`(3)`Executors.newScheduledThreadPool`(4)`Executors.newSingleThreadPool`(5)`Executors.newFixedThreadPool`二、详细Java 中提...原创 2019-09-14 14:27:18 · 237 阅读 · 0 评论 -
【Java】 之 Synchronized
文章目录一、简介二、`synchronized` 提供三种锁(1) 偏向锁(2) 轻量级锁(3) 重量级锁三、使用四、源码分析五、实际运用六、参考资料一、简介同步代码块一般使用 Java 的 synchronized 关键字来实现两种加锁方式:在方法签名处加 synchronized 关键字使用 synchronized(对象 或 类) 进行同步synchronized 锁特...原创 2019-09-10 02:08:49 · 140 阅读 · 0 评论 -
【Java】 之 AQS
文章目录一、AQS简介二、问题(1) 为什么需要 AQS三、设计思想四、源码解析(0) `Node` 队列节点(1) 独占锁(2) 共享锁(3) `LockSupport`五、应用场景六、参考资料关系图:一、AQS简介AbstractQueuedSynchronizer 简称 AQS它是 JUC 包实现同步的基础工具AQS 是 抽象类, 内置自旋锁实现的同步队列, 封装入队和出队...原创 2019-09-10 01:56:02 · 152 阅读 · 0 评论 -
【Java】之 CAS
文章目录一、定义二、测试并使用1. `synchronized`2. `cas`3. 由此可看出三、问题(1) 循环时间过长(2) 只能保证一个共享变量的原子操作(3) ABA 问题四、参考资料一、定义CAS(compare and swap),是一种多线程无锁的编程方式。当修改多个线程可能同时操作的属性时,给定期望值和要更新的值,如果当前值与期望值一致,则更新为要设置的值CAS的底...原创 2019-09-10 01:50:29 · 143 阅读 · 0 评论 -
【Java】 之 ReentraintLock 浅析
文章目录一、简介二、使用三、源码分析(0) `ReentrantLock()`(1) `lock()`(2) `lockInterruptibly()`(3) `tryLock()`(4) `unlock()`四、应用场景五、参考资料关系图: 初识化(2) `acquire()`(3) `release()`四、应用场景五、参考资料关系图:一、简介Semaphore 与 CountDownLatch 略有不同使用步骤:定义资源总量 state = permits当 state > 0 时就能获得锁, 并将 state 减 1当 state = 0 时只能等待其他线...原创 2019-09-08 19:38:55 · 204 阅读 · 0 评论 -
【Java】之 CountDownLatch 浅析
文章目录一、简介二、使用一、简介信号量同步是指在不同的线程之间, 通过传递同步信号量来协调线程执行的先后次序CountDownLatch 是基于执行时间的同步类Tips: 在实际编码中, 可能需要处理基于空闲信号的同步情况使用步骤:初始化时定义了资源总量 state=countcountDown() 不断将 state 减 1当state = 0时才能获得锁释放后s...原创 2019-09-08 15:44:04 · 159 阅读 · 0 评论 -
【Java】之 线程(Thread)
文章目录一、定义二、线程状态在这里插入图片描述1. NEW (新建状态)2. RUNNABLE (就绪状态)3. RUNNING (运行状态)4. BLOCKED (阻塞状态)5. DEAD (终止状态)三、线程安全问题(1)数据单线程内可见(2)只读对象(3)线程安全类(4)同步与锁机制四、同步与锁机制(1)线程同步类(2)并发集合类(3)线程管理类(4)锁相关类一、定义是进程中的一个实体...原创 2019-08-04 02:06:39 · 184 阅读 · 0 评论 -
【Java】 之 打包
Maven 打包生成 jar有两种打包方式:jar包含依赖jar 和 lib(1)jar 包含依赖在pom.xml 加入<build> <finalName>netty-demo</finalName> <plugins> <plugin> ...原创 2019-07-15 21:51:13 · 183 阅读 · 0 评论 -
【Java】 之ThreadPoolExcutor源码浅析
文章目录一、构造方法(1)`corePoolSize` 核心线程数(2)`maximumPoolSize` 表示线程池能够容纳同时执行的最大线程数(3)`keepAliveTime` 线程空闲时间(4)`workQueue` 缓存队列(5)`threadFactory` 线程工厂(6)`handler` 执行拒绝策略的对象二、属性定义三、方法(1)`execute()`(2)`addWorker(...原创 2019-09-14 16:47:21 · 1162 阅读 · 1 评论 -
【Java】 之 Condition
文章目录一、`Condition` 简介(1)方法图二、`Condition` 使用三、`AQS` 中 `Condition`实现(1)`wait()` 等待(2)`signal()` 通知如果想编写一个带有多个条件谓词的并发对象,就可以使用显式的Lock和Condition 而不是 内置锁(Sychronizer) 和 条件队列(Object)每个 Java 对象都可以作为一个锁,每个对象...原创 2019-09-15 20:00:52 · 202 阅读 · 0 评论 -
【Java】之 LockSupport初识
文章目录一、简介二、`LockSupport` 与 线程中断一、简介LockSupport 是一个线程阻塞工具,可以在线程内任意位置让线程阻塞。LockSupport类使用类似信号量的机制。它为每一个线程准备了一个许可,如果许可可用,那么 park()函数会立即返回,并且消费这个许可(也就是将许可变为不可用),如果许可不可用,就会阻塞。unpark() 则使得一个许可变为可用...原创 2019-10-03 16:42:33 · 208 阅读 · 0 评论 -
【Java】之 线程中断
文章目录一、简介(1)问题1. 为什么需要线程中断?2. 什么是线程中断?3. 有什么中断策略?4. 如何响应中断?二、取消与中断(1)取消 `Thread.stop`(2)中断 `Thread.interrupte`三、中断几种方式(1)取消标志 `volatile`(2)`Thread.interrupt()`(3)使用 `Future` 来取消四、阻塞队列处理(1)使用标识状态 `volat...原创 2019-10-03 14:22:57 · 500 阅读 · 0 评论 -
【Java】之 TreeMap
文章目录一、简介二、源码分析(1)属性(2)`put()` 增加(3)`fixAfterInsertion()` 插入节点后动作(4)`remove()` 删除(5)`rotateLeft()` 左旋(6)`fixAfterDeletion()` 删除节点后动作(6)`rotateRight()` 右旋三、演示图一、简介TreeMap 是按照 Key的排序结果来组织内部结构的 Map类集合...原创 2019-10-01 16:23:39 · 253 阅读 · 0 评论 -
【Java】之 HashMap浅析
文章目录一、简介(1)参数简介(2)遍历元素二、扩容数据丢失问题(1)JDK7 源码分析 `put`(2)JDK7 源码分析 `resize`(2)JDK8下,观察`resize`(3)JDK8 源码解析1. `put`2. `resize()`三、死链问题(1)死链原因四、问题(1)哈希碰撞后,拉链了,那如何确定对象呢?一、简介优先推荐使用ConcurrentHashMapHashMa...原创 2019-10-01 10:48:13 · 526 阅读 · 1 评论 -
JSON泛型反序列化, 多层嵌套,使用 TypeReference
当接收到json对象,直接按map进行转换,会出现问题使用 TypeReference,多层嵌套原创 2018-12-02 15:38:45 · 12008 阅读 · 0 评论 -
【Java】之 序列化
文章目录一、简介(1)Java 原生序列化(2)Hessian 序列化(3)JSON 序列化二、资料一、简介内存中的数据对象只有转换为二进制流才可以进行数据持久化和网络传输。对象的序列化(Serialization):将数据对象转换为二进制流的过程称为对象的序列化反序列化(Deserialization):将二进制流恢复为数据对象的过程序列化常见的场景是 RPC 框架的数据传输。常...原创 2019-09-30 15:33:52 · 177 阅读 · 0 评论 -
【Java】之 volatile
文章目录一、简介二、案例(1)双检查锁(Double-checked Locking)(2)`volatile` 不具互斥性三、实际场景一、简介happen before 是时钟顺序的先后,并不能保证线程交互的可见性。即:存在某线程对副本操作,但对于其他线程都是不可见的。可见性:指某线程修改共享变量的指针对其他线程来说都是可见的,它反映的是指令执行的实时透明度每个线程都有独占...原创 2019-09-23 11:11:47 · 161 阅读 · 0 评论 -
【Java】 之 FutureTask 浅析
文章目录一、`Future` 简介(1)创建`Future`方法二、`FutureTask` 仿写(1)定义 `MyFutureTask`(2)测试三、`FutureTask` 源码分析(1)方法图(2)`get()`(3)`run()`一、Future 简介Future表示一个任务的生命周期,并提供了相应的方法来判断是否已经完成或取消,以及获取任务的结果和取消任务等。对应方法图:...原创 2019-09-20 14:20:19 · 216 阅读 · 0 评论 -
【Java】之 LinkedBlockingQueue 浅析
文章目录一、简介二、源码分析(1)`put(E)`(2)`take()`三、应用场景一、简介两种降低锁粒度的技术:锁分解(将一个锁分解为两个锁)锁分段(把一个锁分解为多个锁)LinkedBlockingQueue :先进先出,阻塞队列。拥有takeLock和putLock两个锁。二、源码分析(1)put(E)public void put(E e) throws ...原创 2019-09-17 11:01:15 · 170 阅读 · 0 评论 -
【Java】之 ArrayBlockingQueue 浅析
文章目录一、简介(1)方法二、源码分析(1)`put()`(2)`take()`三、应用场景一、简介ArrayBlockingQueue 是一个先进先出队列,维护takeIndex和putIndex两个指针,可循环使用数组。线程安全一定初始化数组后,数组长度就不能改变(1)方法方法抛出异常返回特殊值阻塞超时退出插入add()offer()put(...原创 2019-09-16 11:01:14 · 205 阅读 · 0 评论 -
【工作】之 日用户资产与日订单比较(Lambda使用)
文章目录一、准备表结构:术词解释:二、 解决思路(1)SQL直接解决(2)API解决1. 获得数据2. 数据关联3. 数据对比4. 数据筛选(统计)三、代码(1)获得数据(2)数据关联(3)数据对比(4)数据筛选四、想法写本文的目的思考:使用SQL方式思考:使用API方式最后需求:统计一个一天用户资产转移与订单关系比较时间:昨日的快照(1点生成) ~ 今日的快照(1点生成)一、准备表...原创 2019-01-27 16:20:42 · 219 阅读 · 0 评论 -
【Lambda】之 流(stream)
流(stream)在类库中议添加新的 流java.util.stream.Stream 以便进行聚集(aggregation)操作其中,Stream&lt;T&gt; 代表对象引用,此外还有一系列特化(specialization)流,比如IntStream代表整形数字流流的操作可以被组合成 流水线(pipeline)例如:shapes.stream() .filter(s ...原创 2019-01-07 20:02:27 · 308 阅读 · 0 评论 -
【Lambda】之 初识
文章目录什么是Lambda?传统集合缺点lambda优势为什么要学习Lambda?需要学习哪些点?举例用lambda表达式实现Runnable用lambda表达式对列表进行迭代使用lambda表达式和函数式接口Predicatelambda表达式 Map 示例lambda表达式 Reduce 示例通过过滤创建一个String列表流(stream)参考资料什么是Lambda?有一种数学模型天生适...原创 2019-01-07 10:49:18 · 263 阅读 · 0 评论 -
【Java 学习】之 getResourceAsStream
参考blog:http://riddickbryant.iteye.com/blog/436693 读取 xx.class 中字节码,恰巧看到这个方法,然后就用这个方法也试得同。public byte[] readBinaryCode(String className) { //className : com.donald.jvm.EmployeeV1 //file原创 2017-04-02 19:54:47 · 514 阅读 · 0 评论 -
【Java】 之 Date、Calendar
Topic: * Topic 1: 使用Calendar 对 天数 进行加减原创 2017-06-03 15:58:55 · 304 阅读 · 0 评论 -
测试正则表达式
用于验证正则表达式是否具备你所期待的匹配功能import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Created by Donald on 2016/12/6. *//** * Allows you to easily try out regular expressions. */public clas原创 2016-12-08 20:33:42 · 507 阅读 · 0 评论 -
类方法提取器(利用reflect)
若不记得一个类是否有某个方法,或者不知道一个类究竟能做什么,则这个小工具就帮上忙了。package December2016;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import java.util.regex.Pattern;/** * Created by Donald on 2016/12/原创 2016-12-14 17:25:35 · 561 阅读 · 0 评论 -
【Java学习】之 Process
进程知识点:http://blog.youkuaiyun.com/fanfan4569/article/details/65937555 参考资料:http://lavasoft.blog.51cto.com/62575/15662/ https://segmentfault.com/a/1190000000372192进程相关类:Proces,ProcessBuilder,Runtime实例原创 2017-03-25 17:02:03 · 837 阅读 · 0 评论 -
【Java】之 简易LinkedList
package dataStructure;/** * Created by donal on 2017/2/14. */import java.util.LinkedList;import java.util.NoSuchElementException;/** * 1. LinkedList实现了基本的List接口 * * 方法: * 1. getFirst() 和 elemen原创 2017-02-15 16:03:39 · 279 阅读 · 0 评论 -
【Java】之 简易Stack
源码package dataStructure;/** * Created by donal on 2017/2/14. */import java.util.LinkedList;/** * 1.LinkedList具有能够直接实现栈的所有功能的方法, * 因此可以直接将LinkedList作为栈使用。 * * 2.JDK 中 Stack 继承 Vector * 3.Stack原创 2017-02-14 20:48:47 · 250 阅读 · 0 评论 -
【Java】之 简易ArrayList
查看ArrayList的方法们(挑选几个)源码package dataStructure;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.regex.Pattern;/** * Created by donal on原创 2017-02-13 23:42:15 · 274 阅读 · 0 评论 -
Java基础知识补充之常量池
一般考点就是运用"==" 与 equal()常量池(constant pool)专门用于管理在编译时被确定并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口中的常量,还包括字符串常量。例子①:输出:false当使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构原创 2016-06-03 16:00:06 · 649 阅读 · 0 评论 -
Java 中 Number那些事
byte short int long float double是Number子类。下面看下Number源码 这些方法用来转化为相应数据类型这里给链接,其他子类的方法: http://www.yiibai.com/java/java_numbers.html原创 2016-06-28 16:25:30 · 419 阅读 · 0 评论 -
【Java学习】之 线程(Thread)
线程知识点:http://blog.youkuaiyun.com/fanfan4569/article/details/65937555一、Java中创建线程:① extend Thread类,并重写run()② implements Runnable接口,实现run()二、调用start()创建新线程① 在JVM中分配内存并初始化新的线程② 调用run()函数,使线程适合在JVM中运行(注意,从不直接调用r原创 2017-03-25 20:53:03 · 521 阅读 · 0 评论 -
【Java学习】之(Write Once,Run Anywhere)
参考资料: 深入理解Java虚拟机 http://blog.youkuaiyun.com/cutesource/article/details/5904542 “一次编写,到处运行”(Write once, run anywhere、WORA,有时也作“write once, run everywhere”、WORE),是太阳计算机系统公司用来展示Java程序设计语言的跨平台特性的口号。 理想中原创 2017-03-24 11:38:26 · 6388 阅读 · 0 评论 -
仿写 Lite Struts
//使用dom4j.jar0. 读取配置文件struts.xml1. 根据actionName找到相对应的class , 例如LoginAction, 通过反射实例化(创建对象)据parameters中的数据,调用对象的setter方法, 例如parameters中的数据是 ("name"="test" , "password"="1234") , 那就应该调用 setNam原创 2017-03-18 20:32:09 · 371 阅读 · 0 评论 -
【Junit】之 仿 junit 3.8.1 写 lite-junit
学习并仿写一个开源项目,O(∩_∩)O~~Junit : 是一个简单的框架,能让程序员轻松的编写,并且自动化运行的单元测试。 自动化单元测试的特点: (1) 自动执行 - 启动以后能把所有的测试都运行 - 一个测试的失败不影响后续测试的运行 (2) 可生成定制的报告 - 哪些成功?哪些失败?有无异常? - 输出形式:xml,htm原创 2017-08-25 02:06:37 · 519 阅读 · 0 评论