- 博客(14)
- 收藏
- 关注
原创 BIO与NIO剖析
BIO - 阻塞的含义 BIO代码示例 服务端: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSo...
2020-03-25 16:35:34
136
原创 TCP / UDP协议
OSI网络七层模型 各层的主要功能 传输控制协议TCP 主要特点: (1)基于流的方式; (2)面向连接; (3)可靠通信方式; (4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销; (5)通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。 TCP握手机制 用户数据报协议UDP UDP协议简介 UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输...
2020-03-16 22:08:20
510
原创 AQS(抽象队列同步器)详解
同步锁的本质 —— 排队 同步的方式:独享锁 - 单个队列窗口,共享锁 - 多个队列窗口; 抢锁的方式:插队抢(非公平锁)、先来后到抢(公平锁); 没捡到锁的处理方式:快速尝试多次(CAS自旋锁)、阻塞等待; 唤醒阻塞线程的方式(叫号器):全部通知、通知下一个; AQS概念 资源占用流程 手写抽象队列同步器 import java.util.Iterator; import java.util...
2020-02-17 14:14:31
509
原创 线程安全之Lock和synchronized的运用
Java中锁的概念 几种重要的锁实现方式:synchronized、ReentrantLock、ReentrantReadWriteLock synchronized的概念
2020-02-16 22:19:12
143
原创 线程安全的问题
在上一节中主要讲了JVM内存模型和线程安全的可见性问题,本节重点讲解线程安全的原子操作; 竞态条件与临界区 代码示例 public class IncrDemo { public int i = 0; public void incr() { i++; //临界区 } } 共享资源 不可变对象 原子操作定义 CAS机制 J.U.C包内的原子操作封...
2020-02-07 20:27:37
81
原创 JVM内存模型详解
JVM运行时数据区(https://blog.csdn.net/maxleader/article/details/104098513) 从内存结构到内存模型 多线程中的问题 所见非所得; 肉眼无法检测程序准确性; 不同的运行平台有不同的表现; 错误很难重现; 工作内存缓存 指令重排序 Java内存模型含义 Shared Variables共享变量描述 线程操作的定义 程序顺序:...
2020-02-03 23:24:56
208
原创 线程池的实现原理和应用
为什么要使用线程池 线程池的原理 - 概念 线程池AIP - 接口定义和实现类 线程池AIP - 方法定义 ExecutorService ScheduledExecutorService 线程池AIP - Executors工具类 线程池原理 - 任务executor过程 有关线程数量 代码示例 import java.util.List; import java.util.co...
2020-01-31 22:00:55
149
原创 线程封闭 - ThreadLocal和栈封闭
线程封闭的概念 ThreadLocal ThreadLocal是Java里一种特殊的变量 代码示例 /** 线程封闭示例 */ public class Demo7 { /** threadLocal变量,每个线程都有一个副本,互不干扰 */ public static ThreadLocal<String> value = new ThreadLocal<>();...
2020-01-29 14:49:52
96
原创 线程通信
线程通信的方式 文件共享 变量共享 线程协作 - JDK API 被弃用的suspend / resume 被弃用的主要原因是:容易写出死锁代码! 所以用 wait / nitify 和 park / unpark 机制对它进行替代。 suspend / resume死锁示例 wait / nitify机制 wait / nitify正常执行与死锁 park / unpark机制 ...
2020-01-29 14:19:10
233
原创 内存屏障和CPU缓存
CPU性能优化手段 - 缓存 多级缓存 缓存同步协议 CPU性能优化手段 - 运行时指令重排序 CPU缓存和CPU运行时指令重排序的2个问题: 内存屏障
2020-01-29 11:14:09
150
原创 线程的状态与线程终止
一、线程的状态 线程的6种状态 线程运行状态图 代码示例 /** * 示例2 - 多线程运行状态切换示例 <br/> */ public class Demo2 { public static Thread thread1; public static Demo2 obj; public static void main(String[] args) throws Ex...
2020-01-28 21:47:11
337
原创 Java程序运行原理分析
一、JVM原理 class文件内容 JVM运行时数据区 方法区 堆内存区 虚拟机栈 本地方法栈 程序计数器 二、程序运行分析示例 代码如下 /** * 示例1 - JAVA程序执行分析 */ public class Demo1 { public int x; public int sum(int a, int b) { return a + b; } publi...
2020-01-28 14:03:33
199
翻译 HashMap底层原理剖析及JDK1.7和1.8的对比
基于Map的K,V数据结构在软件开发中是非常经典的,常用于在内存中存放数据。 HashMap底层是基于数组 + 链表组成,不过在JDK1.7和1.8中具体实现方式不同。 Base 1.7 JDK1.7中的数据结构图: 成员变量 /** 初始容量,默认16 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //...
2019-05-03 22:49:50
1043
翻译 SpringCloud订单模块架构剖析
SpringCloud全家桶包含了很多组件,本文重点解析Eureka、Feign、Ribbon、Hystrix。Zuul这5个核心组件。 业务场景 我们需要开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单后,如果用户立即支付,需要将订单状态改为“已支付”; 扣减相应的商品库存; 通知仓储中心进行发货; 给用户这次购物增加相应的积分; 针对上述流程,我们需要有订单服务、库...
2019-04-24 23:19:07
1424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人