自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多线程-线程之间的通信

1、为什么需要线程通信线程是操作系统调度的最小单位,有自己的栈空间,可以按照既定的代码逐步的执行,但是如果每个线程间都孤立的运行,那就会造资源浪费。所以在现实中,我们需要这些线程间可以按照指定的规则共同完成一件任务,所以这些线程之间就需要互相协调,这个过程被称为线程的通信。线程的通信可以被定义为:线程通信就是当多个线程共同操作共享的资源时,互相告知自己的状态以避免资源争夺。2、线程通信的方式线程通信主要可以分为三种方式,分别为共享内存、消息传递和管道流。每种方式有不同的方法来实现。共享内存:线

2020-10-17 22:41:13 5700 1

原创 多线程-线程的启动和终止

1、线程的构造在运行线程之前首先要构造一个线程对象,java.Lang.Thread中为我们提供了一个用于创建线程时的初始化方法。主要对线程中的属性进行初始化。主要的属性ThreadGroup g:线程组Runnable target:可以调用run方法的对象String name:构造的线程名字long stackSize:新线程所需的堆栈大小,参数为0时表示被忽略主要源码解析private void init(ThreadGroup g, Runnable target, Strin

2020-10-15 19:17:27 600

原创 多线程-线程基础知识

1、什么是线程学习线程,我们首先要了解什么是进程,它和进程有什么样的区别和联系?找了很多资料,大部分都是在说:进程是资源分配的最小单位,线程是操作系统调度的最小单元,这样理解起来还是很抽象,我们先看一副图,我们在解释下它们的概念。如图所示,我们直观上看到,进程之间是相互独立的,正是因为这个原因,所以进程间的数据很难共享,进程间的切换也比较耗费资源;一个进程可以包含多个线程,如线程1和线程2,所以同一进程间的线程能够进行数据共享,又因为线程上的代码的执行需要被记录下来,每个线程都拥有各自的计数器、堆栈

2020-10-14 14:38:54 169

原创 深入了解MYSQL锁

基本概念锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中的数据也是一种供多个用户使用的共享资源,当多个用户并发地存取数据时,在数据库加锁的目的可以保证数据库数据的一致性。锁的类型在数据库中,对数据的操作其实只有两种,即读和写,所以可用共享锁和互斥锁实现,即共享锁间之间是兼容的,而互斥锁间不兼容。共享锁(读锁):允许事务读互斥锁(写锁):允许事务删除或者更新一行数据共享锁代表了读操作、互斥锁代表了写操作,所以我们可以在数据库中并行读,但是只能串行写,只有这样才能保证不会发生线程竞争

2020-10-12 23:04:20 174

原创 深入理解MySQL事务

事务是保证一组数据库的操作,要么全部成功,要么全部失败,这些操作必须保证是一体的,可以理解为事务是并发控制的一个基本单位,事务的的四大特性ACID是事务的基础。在MySQL中,事务的支持是在引擎层出现的。在这篇文章中,我们将会重点讲解事务的四大特性ACID、多版本控制MVCC、当前读和一致性读。事务的四大特性ACID原子性概念原子性是指一个事务是一个不可分割的单位,其中的操作要么成功,要么失败,保证了这些操作是一体的,如果操作执行失败,则已经执行的语句必须回滚退回事务之前的状态。实现原理实现原子

2020-10-10 20:48:45 132

原创 深入理解MySQL执行流程

MySQL是一种关系型数据库,因为是开源且是免费的,因此在企业级开发中被广泛的使用。许多开发者都能够很熟练的在业务中使用的CRUD操作,只关心操作语句产生的结果,忽略语句的执行流程,这篇文章我们会讲解MySQL的基础架构都包含什么,每个部分有什么样的作用,语句是怎么执行的。MySQL架构总体架构先看一张图由上图可知,MySQL可以主要分为连接层、服务层、引擎层和存储层,我们来详细讲解下每层的作用及特点连接层:理解为客户端,主要完成一些类似于连接处理、授权等操作服务层:完成大部分的核心服务功能,

2020-10-09 22:39:01 402

原创 MySQL-Innodb 引擎和 Myisam 引擎的实现

Mysql 底层数据引擎以插件形式设计,最常见的是 Innodb 引擎和 Myisam 引擎,用户可以根据个人需求选择不同的引擎作为 Mysql 数据表的底层引擎。我们刚分析了,B+树作为 Mysql 的索引的数据结构非常合适,但是数据和索引到底怎么组织起来也是需要一番设计,设计理念的不同也导致了 Innodb 和 Myisam 的出现,各自呈现独特的性能。MyISAM 虽然数据查找性能极佳,但是不支持事务处理。Innodb 最大的特色就是支持了 ACID 兼容的事务功能,而且他支持行级锁。Mysql 建

2020-10-08 20:17:01 149 1

原创 MySQL索引原理

Mysql 作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是 Mysql 数据的存储形式以及索引的设计,决定了 Mysql 整体的数据检索性能。我们知道,索引的作用是做数据的快速检索,而快速检索的实现的本质是数据结构。通过不同数据结构的选择,实现各种数据快速检索。在数据库中,高效的查找算法是非常重要的,因为数据库中存储了大量数据,一个高效的索引能节省巨大的时间。比如下面这个数据表,如果 Mysql 没有实现索引算法,那么查找 id=7 这个数据,那么只能采取暴力顺序遍历查

2020-10-06 23:21:28 154

原创 初学JVM-查看JVM参数

打印显式参数 -XX:+PrintVMOptions该参数表示程序运行时,打印虚拟机接受到的命令行显式参数。我们用下面的命令运行程序:java -XX:+UseSerialGC -XX:+PrintVMOptions com.sanmu.ClassLoadDemo输出结果:VM option '+UseSerialGC'VM option '+PrintVMOptions'Hello, I'm sanmu可以看到我们设置了+UseSerialGC和+PrintVMOptions两个参数,

2020-10-05 20:37:41 268

原创 初学JVM-垃圾回收器及回收的几种类型

总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收器、并行回收器、CMS 回收器、G1 回收器。串行回收器串行回收器是指使用单线程进行垃圾回收的回收器。因为每次回收时只有一个线程,因此串行回收器在并发能力较弱的计算机上,其专注性和独占性的特点往往能让其有更好的性能表现。串行回收器可以在新生代和老年代使用,根据作用于不同的堆空间,分为新生代串行回收器和老年代串行回收器。新生代串行回收器串行收集器是所有垃圾回收器中最古老的一种,也是 JDK 中最基本的垃圾回收器之一。在新生代串行回收器

2020-10-03 22:45:20 154

原创 初学JVM-垃圾回收机制

前言垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。 jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的。因为内存总是有限的,我们需要一个机制来不断地回收废弃的内存,从而实现内存的循环利用,这样程序才能正常地运转

2020-10-02 22:28:23 64

原创 初学JVM-JVM内存结构

引言我们都知道了JVM可以在各个系统上运行字节码文件,那么字节码数据在 Java 虚拟机内存中是如何存放的 ?Java 虚拟机在为类实例或成员变量分配内存是如何分配的 ?要解答上面这些问题,我们首先需要了解一下 Java 虚拟机的内存结构。其实 Java 虚拟机的内存结构并不是官方的说法,在《Java 虚拟机规范》中用的是「运行时数据区」这个术语。但很多时候这个名词并不是很形象,再加上日积月累的习惯,我们都习惯用虚拟机内存结构这个说法了。根据《Java 虚拟机规范》中的说法,Java 虚拟机的内存结

2020-10-01 23:51:10 129

原创 初学JVM-类的加载机制

**1、什么是类的加载**类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇

2020-09-30 23:00:36 102

原创 初学JVM—基本原理

前言JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,学习一些JVM必要的知识点。运行流程我们都知道java一直宣传的口号是:一次编译,到处运行。那么它如何实现的呢?我们看下图:java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转换为不同平台的机器码,最终得到执行。这样我们是不是可以推演,如果要在mac系统上运行,是不是只需要安装mac

2020-09-29 22:18:40 139 1

原创 2020-09-28

纪念第一次写博客总结自己写博客的几个原因:一、鉴于自己基础知识还有漏洞,因为之前学习没有系统性,没有及时做笔记,当时了解和明白,但是过一段时间还会遗忘,就好像一看就会,一写就忘,总结下来是因为自己没有回顾和反思,以及进一步的思考加强。二、想记录下来自己的学习经历,人过留名,雁过留声,多年后回顾自己历程,自己一步一步走过来的路,应该会颇有一番感触!想坚持做一件事,并不断地朝着自己的目标前进!就算会有遗憾,但也无怨无悔!三、因为自己在学习的路程中,也经常会从一些大神博客中获得启发,借此如果可以帮到一些初

2020-09-28 21:59:46 99

原创 初学TCP/IP

一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用层,这里面有http,ftp,等等我们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协议就.

2020-09-28 21:40:52 103

空空如也

空空如也

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

TA关注的人

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