- 博客(22)
- 资源 (3)
- 收藏
- 关注
原创 Java 线程池
为什么会想到写这篇文章呢,其实网上也挺多的,主要是这次和同学讨论到一个问题(就是线程工厂创建线程的时候,再次对runnable的run方法捕获异常),就涉及到线程池,而且有些疑问,然我去看一些博客的时候也写的不对,最后还是通过看源码解决自己的疑问。首先,这篇博客会分析一些源码,线程池的设计,然后要注意的一些事项。如果认真读完,保证有收获的。基本概念线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL 数据库连接池。通常,在..
2020-05-15 17:40:46 479
原创 Redis
> 这篇主要会对redis安装,基本概念和一些引用。安装下载tar 解压make (make前需要安装Gcc,用yum安装最简单了 yum -y install gcc gcc-c++ kernel-devel //安装gcc、c++编译器以及内核文件)make test(test 之前需要安装tcl)可以格外创建一个目录用来安装 make redismake...
2020-04-10 10:48:33 314
原创 zookeeper源码分析
在看分布式有关的东西,然后就有用到zookeeper,觉得好奇,就打算把源码看看。看这篇之前,如果想先对zk有个感性认识,可以看下上一篇,本文主要是基于自己看源码时候的理解,当然可能有些地方理解有误,还有很多没有看懂的地方。但看我这篇,多少会有些理解,比如启动过程 选举过程 集群节点通信 客户端连接 集群节点数据同步源码构建这里就不多说了,参考:zookeeper源码构建ZK集群模式启...
2020-04-01 11:47:01 209
原创 Zookeeper
初识Zookeeper前言现在在分布式当中,基本离不开zookeeper的使用。分布式环境下,主要的特点的分布性、并发性、无序性,自然也会面临一些问题,比如(网络通信:网络本身的不可靠性,因此会涉及到一些网络通信的问题;网络分区:也就是我们通常说的脑裂,当网络发生异常导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式架构的所有节点,只有部分节点能够正常通信;三态:...
2020-03-28 19:59:04 318
原创 fastjson和gson一些问题和比较
Serializejson序列化和反序列化,这个是日常中比用到的东西,而且现在工具也比较多,但常用的还是fastjson,毕竟速度快。这主要是关于fastJson和Gson使用时候遇到的一些问题和比较fastjson序列化要注意的是,如果被序列化的对象中,有字段没有对应的Get方法,那么该字段是不会被序列化的。具体原因可以看下源码。//JSONSerializepublic f...
2020-03-17 17:34:11 278
原创 Netty启动过程源码分析
对Netty一些分析,主要是启动过程、线程模型、客户端和服务端TCP连接建立 netty作为一个优秀的网络通信框架,应该大部分人都接触过,之前看了mina,话说是同一个作者,里面的设计和思想还是比较接近的。不过要涉及到里面原理,可能就不是那么清楚。下面我将自己在工作中接触过,和自己看源码的一些理解记录下来。注:只是个人目前的一个理解程度,这篇文章会比较长,基本都是文字和贴的源码,但如果你...
2020-03-06 11:59:24 290
原创 java线程状态及其转换
接下来主要是聊聊,有关java线程的生命周期,和java线程几种状态是如何转换的,以及有关线程中局部变量的一些线程安全问题。通用的线程生命周期通用的线程生命周期基本就五种状态了,如下图所示: 通用线程状态1:初始状态,指的是线程已经被创建,这里仅仅是编程语言层面的创建,但对于操作系统来说,还不运行分配cpu执行。2:可运行状态,指的是线程可以分配CPU执行,在这种状态下,对于...
2019-04-01 11:08:09 205
原创 Java垃圾回收
对于垃圾回收,对于Java程序员来说应该是不陌生的。想要长远的发展,必须对这块机制有所了解,这样才能写出更高效的代码。如果遇到性能的瓶颈,那么肯定要从这方面去分析,做一些调优。前言垃圾回收,在Java虚拟机中,垃圾指的是死亡对象所占用的空间,顾明思议就是对内存中已死的对象进行回收,那么如何找出已死的对象,如何进行回收,已近新的对象内存如何分配,就是垃圾回收要考虑的地方。如何判断对象...
2019-03-17 16:46:11 172
原创 HashMap1.8源码分析
1:HashMap的原理,内部数据结构如何?底层使用哈希表(数组+链表),当链表过长(其实是大于8)的时候会将链表转换成红黑树,以实现n log(n) 的查找。 2:具体过程 对 Key 求 Hash 值,然后再计算 下标。 如果没有碰撞,直接放入桶中, 如果碰撞了,以链表的方式链接到后面, 如果链表长度超过阀值(T...
2018-11-10 17:44:22 109
原创 CAS分析
一:概述 CAS,Compare And Swap,即比较并交换。在Java多并非的操作中,很多地方都用到了CAS操作,如AQS同步组件、Atomic原子类操作都是以CAS实现的,甚至concurrentHashMap在版本1.8中也调用了CAS+Synchronized。可以说CAS在JUC中举足轻重。二:CAS分析 在CAS中有三个参数:内存中存放的值V...
2018-10-19 11:24:36 486
原创 volatile关键字
Java语言为了解决并发程序中存在的原子性、可见性、有序性问题,听过了一些列处理并发的关键字。如synchronized、volatile、final等,上一篇中讲解了synchornizedguan关键字的用法和原理等。在文本中,我们来分析另外一个关键字----volatile。1:volatile:轻量级同步锁volatile本身的意思就是“易挥发”的意思,其实就是不稳定的意思。其作用...
2018-08-28 10:23:43 273
原创 Synchronized关键字
想必大家对这个关键字都很熟悉,毕竟用起来的比较方便和简单的,不需要像用重入锁的时候释放锁,而且此从jdk1.6开始,对Synchronized有很大的优化,性能也得到了一定的提升。本文将主要围绕Synchronized展开,介绍其用法、原理、以及它是如何保证原子性、可见性和有序性的。1:Synchronized用法Synchronized其实是一种内部锁,内部锁是一种排它锁,能够保证原...
2018-08-27 17:51:57 366
原创 Netty简单的服务器和客户端搭建(一)
本文主要是刚学netty,搭建一个简单的服务器和客户端的入门demo。参考书籍《Netty in action》1:开发工具为Idea,使用maven多模块依赖配置。以nettyParent为父parent project,然后在该工程下创建client和server两个module。项目目录结构和parent中的maven配置如下:这个项目中有两个模块,Server与Client...
2018-08-27 10:16:56 4893
原创 设计模式(二)-Builder模式
概念及定义:建造者模式(Builder Pattern)是一种创建型设计模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。简单的说就是将构造复杂对象的过程和组成对象的部件解耦。模式的使用场景1:相同的方法,不同的执行顺序,产生不同的事件结果时;2:多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;3:产品类非常复杂,或者产品类
2017-03-06 20:28:35 239
原创 Java内存管理机制
一:运行时的数据区域 Java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动和存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 1.1:程序计数器:...
2017-03-03 21:25:21 393
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人