![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
子波zibo
这个人是条懒狗,什么也没写
展开
-
结合时间片调度的java自旋锁分析
自旋锁互斥锁: 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。自旋锁: 自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。以上是百度百科中对于互斥锁与自旋锁的定义.在java中, 常见的互斥锁有关键字synchronized, 有Lo原创 2020-10-09 15:56:46 · 359 阅读 · 0 评论 -
java阻塞队列---BlockingQueue
java阻塞队列---BlockingQueuejava阻塞队列---BlockingQueue阻塞队列解决的问题ArrayBlockingQueueoffer()enqueue()take()dequeue()总结java阻塞队列—BlockingQueue阻塞队列解决的问题为什么要用阻塞队列?在日常编码中, 我们会使用到生产者消费者模式, 使用阻塞队列可以快速的实现这一模式线程池中阻塞队列的使用在ThreadPoolExecutor中, 当核心线程数给占用完毕后, 后来的任务都会被加原创 2020-09-18 11:24:05 · 139 阅读 · 0 评论 -
netty的学习与rpc实践---rpc整合zookeeper的服务注册发现
rpc整合zookeeper的服务注册发现zookeeper客户端zookeeper服务端注册manager整个rpc的流程图后记前文:使用spring框架进行整合本文使用的zookeeper为3.5.8版本zookeeper客户端客户端需要与zk连接, 并且监听zk下某一节点的变化, 在节点发生变化后, 我们的服务缓存需要刷新,刷新的时候重新去zk上读取所有服务进行map缓存监听器监听节点变化, 节点发生变化则会调用refresh方法, 但是我们在第一次加载zk的时候在spring中已经做了r原创 2020-09-01 15:22:48 · 202 阅读 · 0 评论 -
netty的学习与rpc实践---使用spring框架进行整合
使用spring框架进行整合需求分析获取spring的上下文clientserverRegistrar自定义的Bean工厂代理类后记前文:构建Netty应用需求分析netty在启动spring的时候自动启动需要编写代理类, 代理需要通信的接口需要使用rpc的接口在spring生成bean之前被代理通过服务或接口名与方法名找到服务端中对应的方法接口名对应的实现类在spring容器中做预处理获取spring的上下文通过实现ApplicationContextAware接口, 重写setAp原创 2020-08-31 16:29:04 · 255 阅读 · 1 评论 -
netty的学习与rpc实践---构建Netty应用
构建Netty应用构建Netty应用clientHandlerserverhandler编码解码器统一的数据接收发送如何找到具体调用方法后记构建Netty应用client这里只说明与Netty有关的, 其他功能会略作解释用了spring框架, 获得上下文容器因为我们需要获取yml中配置的zookeeper地址 public void setApplicationContext(ApplicationContext applicationContext) throws BeansExcept原创 2020-08-28 14:33:10 · 174 阅读 · 0 评论 -
netty的学习与rpc实践---了解netty
了解nettynetty初步学习简介与特性Netty的核心组件netty初步学习本文结合自己的一些思考和netty实战书写简介与特性分类Netty的特性设计统一的API支持多种传输类型 阻塞的和非阻塞的简单而强大的线程模型 真正的无连接数据报套接字支持 链接逻辑组件以支持复用易于使用详实的Javadoc和大量的示例集不需要超过JDK 1.6+③的依赖。(一些可选的特性可能需要Java 1.7+和/或额外的依赖)性能拥有比 Java 的核心 API 更高的吞吐量以原创 2020-08-28 10:00:24 · 219 阅读 · 1 评论 -
java源码学习-线程池ThreadPoolExecutor
线程池ThreadPoolExecutormain方法构造器Worker内部类executoraddWorkerrunWorkergetTask后记main方法先贴上我做实验使用的main方法public class ThreadPoolExecutorTest { public static void main(String[] args) { int coreP...原创 2020-04-26 01:20:07 · 288 阅读 · 0 评论 -
java-AQS源码学习-响应中断的lock
AQS-响应中断的lock前文:AQS源码学习在lock中, 我们有响应中断处理和不响应中断处理的lock, 而在日常使用中, 经常使用的是不响应的.lock操作本文就来学习一下, 在aqs中是如何做到响应线程interrupt的获取锁操作的public final void acquireInterruptibly(int arg) throws InterruptedException { // 在尝试获取之前判断线程异常状态 // 这里的原创 2020-08-17 15:43:34 · 694 阅读 · 0 评论 -
java源码学习-Mybatis(4)创建statement和结果集生成
Mybatis创建statement和结果集生成statementHandler前文:Mybatis(3)执行sql过程statementHandler在Mybatis的Configuration类中, 存在下面三个方法, 我们想要生成一个statment就需要通过一个statemeng的处理器 public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, B原创 2020-06-25 15:52:17 · 1398 阅读 · 0 评论 -
java源码学习-Mybatis(3)执行sql过程
Mybatis执行sql过程jdbc执行流程图方法调用链后记前文:Mybatis与数据库建立连接jdbc执行流程图执行sql的过程就是发起请求的过程, 前文中已经学习了如何建立并获取数据库连接, 本文主要就是学习一下在service调用mapper获取结果的过程, 也就是上图的3~6的过程方法调用链首先通过上文, 我们知道了Mybatis执行sql必须要先获取数据库的连接, 所以我们在SimpleExecutor这个类中的prepareStatement方法中获取了connection, 我们找原创 2020-06-21 20:33:53 · 364 阅读 · 0 评论 -
java源码学习-Mybatis(2)与数据库建立连接
Mybatis与数据库建立连接jdbc执行流程图Mybatis初始化Hikari连接池的启动Mybatis获取数据库连接后记前文:Mybatis加载mapper流程由于mybatis是在jdbc的基础上进行封装的, 所以jdbc执行流程 获取连接->创建statements->resultSet这些步骤mybatis都是存在的, 本篇学习一下Mybatis获取Connection的步骤jdbc执行流程图Mybatis初始化由于我这里是在springboot中整合使用的mybatis并原创 2020-06-19 22:09:10 · 472 阅读 · 0 评论 -
java源码学习-线程池ThreadPoolExecutor的shutdown流程以及线程的销毁
线程池shutdown流程以及线程的销毁流程图shutDown()tryTerminate()后记流程图shutDown() public void shutdown() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { // 检查权限, 是否可以终止线程池 checkShutdownAccess();原创 2020-05-17 17:10:54 · 1380 阅读 · 0 评论 -
java中实现单例模式的两种方式, 饿汉与懒汉
java中实现单例模式的两种方式饿汉模式懒汉模式单例模式的应用场景之前学习单例模式都是看别人是如何实现的, 今天就自己写一下实现单例模式的代码, 在这里分享一下饿汉模式饿汉模式其实就是大部分人最常使用的一种单例模式public class SingletonTest { private final static SingletonTest singletonTest = new ...原创 2020-04-29 21:53:15 · 289 阅读 · 0 评论 -
java学习-jvm的可达性分析与G1收集器
jvm的可达性分析与G1收集器GC RootsG1收集器初始标记并发标记并发的可达性分析增量更新原始快照最终标记筛选回收记忆集与卡表GC Roots可达性分析, 可达到的地方是GC Roots, 只要与GC Roots之间存在引用链, 则说明这个对象有可达性的, 这个对象不应该被回收, 固定可以作为GC Roots的对象有以下几种:在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程...原创 2020-04-18 14:53:50 · 467 阅读 · 0 评论 -
java j=j++解析
写一个mian函数 用javap指令来看看他的字节码指令 public static void main(String[] args) { int j = 0; j = j++; int i = 0; i = ++ i; System.out.println(j); System.out.pri...原创 2020-04-17 14:06:44 · 903 阅读 · 0 评论