自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除