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