- 博客(17)
- 收藏
- 关注
原创 Java并发编程之原子类
Java并发编程之原子类1.AtomicInteger(数组/对象原理均相同)AtomicInteger是对int类型的一个封装,提供原子性的访问和更新操作,其原子性操作的实现是基于CAS(compare-and-swap)技术。从AtomicInteger的内部属性可以看出,它依赖于Unsafe提供的一些底层能力,进行底层操作以volatile的value字段,记录数值,以保证可见性。...
2019-08-14 00:35:40
123
原创 Java并发编程之集合
Java并发编程之集合1.List, SetCopyOnWriteArrayList相当于线程安全的ArrayList,它实现了List接口。CopyOnWriteArrayList是支持高并发的CopyOnWriteArraySet相当于线程安全的HashSet,它继承于AbstractSet类。CopyOnWriteArraySet内部包含一个CopyOnWriteArrayList...
2019-08-14 00:34:31
167
原创 Java并发编程之volatile
Java并发编程之volatile1.两层语义一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。禁止进行指令重排序。当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中...
2019-08-11 23:47:58
97
原创 Java并发编程之锁
锁1.AQSAQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现。AQS是独占锁(例如,ReentrantLock)和共享锁(例如,Semaphore)的公共父类。1.AQS锁的类别分为“独占锁”和“共享锁”两种(01) 独占锁 – 锁在一个时间点只能被一个线程锁占有。根据锁的获取机制,它又划分为“公平锁”和“非公平锁”。公平锁,是按照通过CLH等待线程按照先来先得的...
2019-08-11 23:42:06
121
原创 Java并发编程之基础多线程
同步/多线程之基础多线程1.操作系统进程/线程状态在现在的操作系统中,因为线程依旧被视为轻量级进程,所以操作系统中线程的状态实际上和进程状态是一致的模型,以下是操作系统中的进程/线程状态:从实际意义上来讲,操作系统中的线程除去new和terminated状态,一个线程真实存在的状态,只有:ready:表示线程已经被创建,正在等待系统调度分配CPU使用权。running:表示线程获得了...
2019-08-10 14:59:46
116
原创 Java基础之泛型
Java基础之泛型1.概念(1.5引入)类型参数,这样的代码具有更好的可读性。编译器会自动帮我们检查,避免向集合中插入错误类型的对象,从而使得程序具有更好的安全性,可以将运行时错误提前到编译时错误。2.通配符List<? extends T>可以接受任何继承自T的类型的List,而List<? super T>可以接受任何T的父类构成的List。例如List<...
2019-08-04 23:55:16
104
原创 Java基础之IO/流
Java基础之IO/流1.字节,字符,缓冲流字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的。但实际...
2019-08-01 23:37:50
93
原创 Java基础之细碎知识点归纳
Java基础之细碎知识点归纳1.Object类的九大方法1.clone方法保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。2.getClass方法final方法,获得运行时类型。3.toString方法该方法用得比较多,一般子类都有覆盖。4.finalize方法该方法用于释放资源。因为...
2019-07-30 23:21:45
118
原创 Seata初探
Seata初探最近在研究Seata,阿里的开源的分布式事务中间件,主要应用场景是微服务。我先探究了AT(Automatic Transaction)模式,特点是0侵入1.设计定义 3 个组件来协议分布式事务的处理过程Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。Transaction Manage...
2019-07-28 01:41:37
2328
原创 幂等性浅析
一.概述幂等性原本是数学上的概念,即使公式:f(x)=f(f(x)) 能够成立的数学性质。用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。幂等性是分布式系统设计中十分重要的概念,具有这一性质的接口在设计时总是秉持这样的一种理念:调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生。幂等有两个维度:一是空...
2019-07-24 16:28:05
220
原创 分布式一致性实现之TCC/SAGA
一.概述之前提到了一致性协议中的2PC/3PC,可以在一定程度上解决分布式事务的问题,但是在微服务架构中依然不合适,原因如下:由于微服务间无法直接进行数据访问,微服务间互相调用通常通过RPC(dubbo)或Http API(SpringCloud)进行,所以已经无法使用TM统一管理微服务的RM。不同的微服务使用的数据源类型可能完全不同,如果微服务使用了NoSQL之类不支持事务的数据库,则事...
2019-07-24 16:22:38
902
原创 分布式一致性实现之2PC/3PC
约定:我们将提议的节点称为协调者(coordinator),其他参与决议节点称为参与者(participants, 或cohorts)一.2阶段提交(tow phase commit)1.概述所谓的两个阶段是指:准备阶段(投票阶段)提交阶段(执行阶段)2.缺点二阶段提交有几个缺点:同步阻塞问题。执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他...
2019-07-14 15:57:32
829
原创 Springcloud探究之Ribbon
RibbonRibbon是Springcloud组件中比较重要的一个组件,起到了负载均衡的作用(相似作用的还有Feign,两者在负载均衡方面差不多,其他功能还是差距比较大的,但是其实Feign内部使用的也是Ribbon)主要功能说到负载均衡,其实很容易想到大名鼎鼎的nginx,那么为什么这里要使用Ribbon呢?其实Ribbon的负载均衡和nginx的负载均衡非常不一样,前者是客户端负载均衡...
2019-06-18 16:21:03
154
原创 Springcloud探究之Zuul
ZuulZuul是Springcloud组件中比较重要的一个组件,起到了一个网关的作用(相似作用的还有GateWay,但是还没研究过,等研究了之后可以写一篇对比)主要功能设想,在一个分布式的架构中,许多服务会根据不同的功能划分为不同的微服务模块,而我们客户端如果直接能够请求到服务,那么从安全角度和代码重构角度而言都不是一个很好的选择。此外,不同终端对于服务的请求机制也不尽相同,例如手机app...
2019-06-18 15:55:57
114
原创 Web hook自动部署
之前写博客的时候都直接在Linux云服务器上写,平时倒是没有什么问题,但是因为我使用了国外的服务器,导致延时时高时低,有的时候连一个ssh都连不上。无奈之下开始探寻新的方式。后来发现将云服务器和GitHub关联起来,实现本地修改,远端更新。方式其实是有很多种,我选择的这一种也算是比较简单的具体步骤在GitHub创建仓库,具体步骤不详细说。在远程Linux服务器相应文件夹建立和GitHub...
2019-06-14 19:19:52
472
原创 Spring cloud微服务初探
很早以前就一直想搭建一个分布式微服务的工程,但是因为种种原因搁置了,这次终于上手了Spring cloud,至于为什么选择Spring cloud而不是dubbo,仅仅是因为Spring cloud基于Spring boot,更加方便,待我学会Spring cloud以后再去探究dubboSpring cloud简介Springcloud 是一个优秀的微服务框架,那么什么是微服务架构呢,简单来...
2019-06-11 21:47:35
139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人