java
文章平均质量分 81
百里晓生
这个作者很懒,什么都没留下…
展开
-
javasist代码实现解析
概述Javassist是一个开源的分析、编辑和创建Java字节码的类库,可以直接编辑和生成Java生成的字节码。相对于bcel, asm等这些工具,开发者不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。javassist简单易用, 快速。重要的类ClassPool:javassist的类池,使用ClassPool 类可以跟踪和控制所操作的类,它的工作方式与 JVM 类装载器非常相似CtClass: CtClass提供了类的操作,如在类中动态添加新字段、方法和构造函数、以及改变类、父类和接原创 2022-05-17 15:01:51 · 547 阅读 · 0 评论 -
dom4j合并xml报文
dom4j合并xml报文报文转换思想:先将报文最长转化为dom对象再将报文进行对比不存在的就新增进去原dom对象xml报文:<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <hgwTerminalRestartResponse原创 2022-03-02 22:42:52 · 642 阅读 · 0 评论 -
线程安全
1.JVM运行时数据区线程独占:每个线程都会有它独立的空间,随线程生命周期而创建和销毁线程共享:所有线程能访问这块内存数据,随虚拟机或者GC而创建和销毁2. Java内存模型VS JVM运行时数据区3.初看Java内存模型前面章节中的大部分讨论仅涉及代码的行为,即一次执行单个语句或表达式,即通过单个线程来执行。Java虚拟机可以同时支持多个执行线程,若未正确同步,线程的行为可能会出现混淆和违反直觉。本章描述了多线程程序的语义;它包含了,当多个线程修改了共享内存中的值时,应该读取到哪个值的原创 2021-04-05 00:01:14 · 1367 阅读 · 3 评论 -
java线程
1.API弃用的suspend和resume作用:调用suspend挂起目标线程,通过resume可以恢复线程执行。元整代码参考以下示例正常返回: /** 包子店 */ public static Object baozidian = null; /** 正常的suspend/resume */ public void suspendResumeTest() throws Exception { // 启动线程 Thread consumerThread = new Thread(()原创 2021-03-29 14:11:31 · 128 阅读 · 0 评论 -
hystrix
服务常见问题:服务不肯能永远健康,有可能超、网络不通,导致调用者出现阻塞系统雪崩:请求大量被阻塞会大量占用资源就可能导致整个系统雪崩构建弹性应用的思路服务消费者限制自身对某一服务能够发起的并发请求数量,超过数量则不调用。服务熔断:熔断状态下,服务消费者不会发起对某一服务的调用。服务降级:请求异常情况下,程序执行指定的降级策略(此处可类比异常捕获catch代码块)Hystrix的初始化流程:Hystrix核心执行流程:Hystrix与springcloud集成1.启动类添加注解原创 2020-12-31 10:30:54 · 114 阅读 · 0 评论 -
ecureka
1.无服务注册中心1,1系统服务器不固定,随时可能新增服务器1.2 接口调用无法知晓服务具体的ip和Port地址。(除非手工调整接口调用者的代码)2.Ecureka的作用流程说明服务提供者启动时:定时向EurekaServer注册自己的服务信息(服务名、IP、端口…等等)相关参数信息:eureka.instance.instanceId 实例唯一IDeuraka.client.serviceUrl :Euraka客户端服务消费者启动时:后台定时拉取Eureka-Server中的存储服务信原创 2020-12-27 14:25:55 · 130 阅读 · 0 评论 -
zookeeper和redis的分布式锁实现方式
1.zookeeper分布式锁1.1分布式锁方式一:所有实例都注册到同一个节点上去,成功的加锁,不成功的失败,当一个解锁后删除该节点,监听该节点的所有实例就会去抢锁,这就导致所有的都要去抢。以下代码解析:package com.study.mike.zookeeper;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CountDownLatch;import java.util.c原创 2020-09-13 13:30:04 · 230 阅读 · 0 评论 -
redis哨兵高可用搭建
[TOC]Redis下载安装下载redishttps://redis.io/download# 下载wget http://download.redis.io/releases/redis-5.0.3.tar.gz# Installationtar xzf redis-5.0.3.tar.gzcd redis-5.0.3make# 创建文件夹 mkdir /usr/local/redis/confmkdir /usr/local/redis/datamkdir /usr/local原创 2020-06-06 21:25:28 · 263 阅读 · 0 评论 -
redis5集群搭建
文章目录1、 环境信息2、整体集群信息3、每台服务器上面都要下载安装4、准备6个redis.conf配置文件(为了方便学习,redis.conf根据不同端口来命名,方便一台机器上构建伪集群)5、启动6个Redis实例6、 创建cluster7、 集群检验和测试8、集群slot数量整理 reshard9、 测试自动故障转移10、手动故障转移11、扩容12、缩容(删除节点)13、关心的问题1、 环境信息centos7redis52、整体集群信息# 以直接在一台机器上实现上述的伪集群,因为端口号特意设原创 2020-06-06 21:00:41 · 527 阅读 · 0 评论 -
KAFKA讲解
1.简介kafka是linkedin使用Scala编写具有高水平扩展和高吞吐量的分布式消息系统。kafka 对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。无论kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性,为集群保存一些meta信息。用scala高水平扩展kafka唯一根据Topic进行归类。主流MQ对比原创 2020-05-29 17:05:12 · 290 阅读 · 0 评论 -
带你走进Netty世界
Netty简介Netty是一个高性能、高可扩展性的异步事件驱动的网络应用程序框架,它极大地简化了TCP和UDP客户端和服务器开发等网络编程。Netty四个重要内容:Reactor线程模型:一种高性能的多线程程序设计思路Netty中自己定义的Channel概念:增强版的通道概念ChannelPineline职责链设计模式:事件处理机制内存管理:增强的ByteBuf缓冲区Netty整体...原创 2020-03-24 19:11:39 · 179 阅读 · 0 评论 -
Java NIO,BIO编程 udp和tcp讲解
Tcp/udp协议osi网络七层模型为使不同计算机厂家的计算机能够互相通信,以便在更大的范围建立计算机网络,有必要建立一个国际范围的网络体系结构标准。具体其组成如下图:各层的主要功能:物理层:使原始的数据比特流能在物理介质上传输。数据链路层:通过校验、确认和反馈重发等手段,形成稳定的数据链路。网络层:进行路由选择和流量控制。(IP协议)传输层:提供可靠的端口到端口的数据传输服务(T...原创 2020-03-22 15:52:19 · 1050 阅读 · 0 评论 -
并发容器类和并发控制工具类与forkjoin解析
1、ArrayListarrayList是由一维数组组成的,其 无参时,初始化为length=0的数组可以通过其源码知道: /** * Constructs an empty list with an initial capacity of ten. */ public ArrayList() { this.elementData = DEF...原创 2020-03-19 20:54:04 · 173 阅读 · 0 评论 -
HashMap和CurrentHashMap的源码解析
HashMap Java 71、首先我们查看hashMap底层是由什么组成的先写一个代码了进入源码HashMap<String, String> map = new HashMap<>();map.put(“James”, “James is handsome”);进入到put中可以查看到其源码: public V put(K key, V value) {...原创 2020-03-15 17:41:20 · 541 阅读 · 0 评论 -
Lock接口及其实现
1、Locks包 类层次结构如下图:1.1 RenntrantLock其是可重入锁如下图所示:运行上图的代码可以知道可以不断锁住没有释放,结果就是线程锁没添加一个lock()数量就多一个。2、Lock接口方法如下图:3、synchronized和Lock的比较synchronized优点:1、使用简单,语义清晰,哪里需要点哪里2、由JVM提供,提供了多种优化方案(锁粗化、...原创 2020-03-14 16:41:02 · 816 阅读 · 0 评论 -
java锁相关理解《云课堂》
JAVA中锁的概念自旋锁:是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断的判断锁是否能被成功获取,直到获取锁才会退出循环(cas)。乐观锁:假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改(如cas(0,1)先比较正确就交换失败就自旋)悲观锁:假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁(sy...原创 2020-03-07 16:03:08 · 156 阅读 · 0 评论 -
线程安全之原子性揭秘-《云课堂》
1.原子操作原子操作可以是一个步骤,也可以是多个步骤操作,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将整个操作视作一个整体,资源在该操作中保持一致,这是原子性的核心特征。下面我们先执行一个例子public class Counter {volatile int i = 0;public void add() { i++;}}public ...原创 2020-03-06 15:05:57 · 123 阅读 · 0 评论 -
线程安全之可见性揭秘-《云课堂》
java 内存模型 (jmm)和jvm运行区区别java内存模型是Java语言规范(提出规则) 描述多线程程序的规则规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型(用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内...原创 2020-03-04 11:56:45 · 142 阅读 · 0 评论 -
springboot 和spring的解析
1.spring 其主要是容器的作用通过xml如web.xm其他的xml文件实例化对象到hashmap中就是所谓的容器。通过ioc创建对象到容器中和管理对象的生命周期。di是对容器中的对象进行注入,比如a使用b对象就将b注入到a中,维持依赖关系。2.springboot是spring平台和第三方库进行了整合,可创建可以运行,独立的生产级基于spring的应该程序。2.1springboot不用...原创 2020-02-25 18:50:13 · 173 阅读 · 0 评论