自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 单机单节点部署kafka

单机单节点部署kafka环境准备服务器:JDK依赖:查看已有openjdk版本卸载openjdk下载jdk1.8配置环境变量安装zookeeper1.下载2、解压3、修改配置文件4、启动ZKkafka下载1、下载解压kafka2.启动zookeeper(参考上文命令)3.启动kafka4.创建Topic5、启动Producer6、启动Consumer环境准备服务器:linux服务器,CentOS 8.2 64位JDK依赖:CentOS 不同版本可能存在不同,但是有些版本,例如CentOS7自带了一

2021-07-10 21:45:12 691 2

原创 condition源码分析及基于condition实现阻塞队列

condition源码分析及基于condition实现阻塞队列condition通过wait(),signal()实现线程间通信wait()signalcondition通过wait(),signal()实现线程间通信public class ContidionDemo { private List<String> bags = new ArrayList<>(); private Integer maxSize = 10; Lock lock = new

2021-06-14 21:47:49 320

原创 线程安全性之可见性和有序性

线程安全性之可见性和有序性什么是线程的可见性volatile解决可见性问题缓存一致性问题为提升性能,cpu所做的优化CPU层面上的缓存缓存一致性问题什么是线程的可见性在以下案例中,就是t1线程中用到了stop这个属性,接在在main线程中修改了 stop 这个属性的值来使得t1线程结束,但是t1线程并没有按照期望的结果执行。public class VolatileDemo01 { private static boolean stop = false; public static

2021-05-31 21:57:09 304

原创 并发编程中的原子性问题及Synchronized的基本原理

并发编程中的原子性问题及Synchronized的基本原理原子性问题问题的本质图解问题本质原子性问题在下面的案例中,演示了两个线程分别去去调用 object.add()方法来对 i 这个变量进行叠加,预期结果应该是20000,但是实际结果却是小于等于20000的值。public class ThreadTest04 { private int count= 0; public void add() { count++; } public static

2021-05-22 17:56:25 179

原创 深入浅出讲解java线程的运行状态

深入浅出讲解java线程的运行状态java线程的6种运行状态详细说明各个线程状态1、初始状态2、运行状态2.1就绪状态2.2 运行中状态3、阻塞状态4、等待状态5、超时等待6、终止状态通过代码验证线程的状态java线程的6种运行状态初始状态(new):新创建了一个线程对象,但还没有调用start()方法。运行状态(runnable):运行状态,JAVA线程把操作系统中的就绪和运行两种状态统一称为“运行中”。当线程对象创建成功后,当该对象的start方法被调度时,线程并不会立刻执行。而是进入一个就绪状

2021-05-20 21:46:52 601

原创 一文带你了解什么是IOC容器及IOC容器注入的方式

IOC控制反转什么是IOC(IOC)控制反转首先而是一种思想,控制反转主要是对对象控制权的转移。springioc容器创建对象,注入依赖。然后将对象的使用权交出去。如果想要理解控制反转,我们应该了解“谁控制谁?控制什么?为何是反转?(有反转就有正转),哪些方面反转了?”1. 谁控制谁?控制什么:在传统程序开发过程中,主要是由程序通过new来创建对象。而控制反转思想中,是由IOC容器创建对象,并注入对象需要的依赖对象。谁控制谁?肯定是IOC容器控制了对象。控制什么?主要就是控制了外部对资源的获取。2

2021-05-16 22:13:39 984

原创 深入浅出讲JVM的知识体系

深入浅出讲JVM的知识体系走进JVMjdk,jre,jvm的关系java程序的运行class文件内容格式定义类加载机制( Class Loader)load(装载)如何加载类双亲委派原则link(链接)initialize(初始化)运行时数据区方法区堆java虚拟机栈栈帧程序计数器本地方法栈JVM的内存模型使用工具来查看虚拟机内存模型垃圾回收如何判断一个对象是垃圾引用计数法可达性分析垃圾回收算法标记清除复制标记整理垃圾回收器SerialParNewParallelCMSG1总结如何选择收集器今天周六,早上

2021-04-27 21:01:29 145

原创 如何查看class文件内容

java程序在编译过程中,java源码通过javac将代码编译成class文件。如果我们直接打开class文件,大概率是一些乱码。这个时候我们需要借助一些工具来查看class文件。我这边随意编写了一个java类,如下:public class User { private String age; public String userName; public static final String count="123"; public String getAge() {

2021-04-24 09:48:12 6051 1

原创 CountDownLatch的使用和源码分析

长夜漫漫,无处消遣,外面还下着雨,好吧。。。。不如写一篇技术博客。今天分享的技术博客主要是关于CountDownLatch的使用和源码分析。废话不多说,直接看下面:CountDownLatch的概述首先,CountDownLatch是一个工具类,它能够协调多个线程之间的同步。可以是一个线程等其他线程全部执行完毕之后再运行。其内部实现原理很简单,主要是依靠一个计数器来完成的,技术器的初始值可以在定义CountDownLatch的对象时通过构造方法定义。每当一个线程执行完之后,计数器的值就会减1。当计数

2021-04-18 21:33:33 77

原创 java并发编程之AQS

概述AQS 全称AbstractQueuedSynchronizer,其实就是一个抽象类。它定义了一套多线程访问共享资源的同步器框架。其实其内部主要是通过定义了一个共享资源(volate int state)和双向队列。当多线程抢夺共享资源时,如果没有抢占成功的线程就会被分配到双向队列中阻塞等待。通过源码分析AQS想向一个场景,当多线程同时竞争锁时,此时竞争到锁的线程继续执行,那么没有竞争到锁的线程不得不阻塞等待。那么在这里,其他线程阻塞,等待的逻辑时怎样的?这些被阻塞的线程又是如何被唤醒的呢?接

2021-04-17 22:59:20 170

原创 ThreadLocal的实际作用及实现原理

在多线程的情况下,我们有时需要访问同一个共享变量,并且对共享变量做某种操作。但是由于多线程的存在,不同线程间对同一个共享变量的操作可能会互相影响。可是在实际业务中,我们可能都需要对共享变量做初始操作,又不想互相影响,这个时候就需要一个机制,将多线程之间相互隔离。从而使得其他线程对该共享变量进行操作时,不会影响其他线程。例如以下代码,我们希望各个线程都对初始变量count做加10操作。如果使用多线程,代码如下:public class ThreadLocalWork extends Thread {

2021-04-12 23:05:48 189

原创 HashMap的源码分析

要想了解HashMap的源码,首先要知道它的底层结构。jdk1.7及其之前,HashMap的底层结构采用的是数组+链表的形式。jdk1.8以后,HashMap的底层结构采用的是数组+链表 或者数组+红黑树的方式。定义的关键参数// 默认的HashMap中数组的长度 16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16// HashMap中的数组的最大容量 static final int MAXIMUM_C

2021-04-11 19:21:20 68

原创 TreeMap的源码分析

对map的源码分析要比之前的ArrayList和LinkedList分析难一些,不是因为它的代码有多难,而是它内部是依靠红黑树来实现的。如果不了解红黑树的概念,那么看TreeMap或者HashMap的源码肯定是有点难度的。在分析之前,先简单的介绍一下红黑树的概念,后面有时间,正确整理一份红黑树的专题博客。红黑树的特点每个节点要么是红色,要么是黑色根节点必须是黑色每个叶子节点是黑色每个红色节点的两个子节点必须是黑色任意节点到每个叶子节点的路径包含相同数量的黑节点红黑树其实一种二叉树,它的目的是

2021-04-04 10:46:11 85

原创 Vector源码分析

Vector和ArrayList很类似,都是以动态数组的形式来存储数据Vector线程安全的,因为每个操作方法都加的有synchronized关键字,针对性能来说会比较大的影响,慢慢就被放弃了。源码中线程安全性示例方法 public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount+

2021-04-04 09:31:42 65

原创 LinkedList的源码分析

上一篇文章简单的整理了ArrayList的源码。想一想干脆把java几个常用的集合全部分析一遍。接下来讲解一下LinkedList的源码。LinkedList与双向链表linkedList本质是一个双向链表,所以在分析其源码时,首先要搞清楚什么是双向链表,双线链表有哪些特点:灵活的空间要求,存储空间不需要连续。不支持下标访问,支持顺序遍历检索。增对增删效率会更高些,只和操作节点的前后节点有关系,无需移动元素。源码分析LinkedList是通过双向链表去实现的,他的数据结构具有双向链表的优缺

2021-04-03 23:54:07 76

原创 ArrayList的源码分析

今天放假呆在家里实在无聊,无意翻到之前自己做的笔记,今天整理出来发个博客。主要讲一下ArrayList的源码。ArrayList的本质arrayLilst本质是一个数组。它的源码内部各个方法的实现其实是建立在数组的基础上的。所以想要了解ArrayList,就不得不了解数组的特性。以下是数组的特点:内存地址连续,使用之前必须指定数组长度可以通过下标访问的方式来访问数组元素,查询效率高增删操作会给系统带来性能消耗源码分析初始操作在将源码之前,先将源码中定义的一些属性先简单的理一下://默认

2021-04-03 22:45:46 68

原创 解决多线程死锁问题

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-03-29 11:22:18 753

原创 通过容器实现单例模式

今天再为大家提供一个实现单例模式的方法,注册式单例模式。首先创建一个容器类,用来盛放创建的单例。public class ContainerSingleton2 { private ContainerSingleton2(){} private static Map<String,Object> ioc=new ConcurrentHashMap<>(); public static Object getInstance(String clas

2021-03-21 11:46:32 453

原创 通过枚举实现单例模式

通过枚举实现单例模式对于饿汉式单例模式和懒汉式单例模式了解的同学,使用以上两种单例模式,我们均可以通过反射的方式破坏单例模式的特性。那么,如何才能避免程序开发中使用反射的方式破坏单例的这种行为呢?接下来用过枚举的方式来创建的单例模式就可以避免上述的问题。直接上代码:public enum EnumSingleton { INSTANCE; //枚举类可以自定义一些属性 private Object data; public Object getData() {

2021-03-20 23:01:53 804

原创 单例模式之懒汉式单例模式

单例模式之懒汉式单例模式本文将探讨三种懒汉式单例模式,会从代码的运行效率,线程安全等方面探讨。在上一篇文章中,刚刚介绍饿汉式单例模式,在本文开头先简单的说一下懒汉式单例模式和饿汉式单例模式的区别:首先懒汉式单例模式,是在程序需要用到该实例时才会创建的。这样就不会像饿汉式一样,在类加载过程中就会创建。这样就减少了内存的浪费,当然也自然而然的带来了一些缺点:需要时才创建,影响程序的执行效率。另外,懒汉式单例模式在使用时进行创建,势必会带来线程安全的问题,需要解决以上问题,就需要用到锁。锁的使用也在一定程度

2021-03-20 19:58:00 5175

原创 单例模式之饿汉式单例模式

单例模式之饿汉式单例模式单例模式三要素:1、私有的静态属性,这主要是为了存储类唯一的实例2、公共的静态方法,这主要是为了提供给外键生成获取单例的方法3、用于限制类再次实例话的措施。一般会私有化类的构造方法。饿汉式单例模式在类加载过程中就直接创建单例。代码如下:public class HungrySingleton { private HungrySingleton() { } private static final HungrySingleton hungrySin

2021-03-20 16:55:07 2687

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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