自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java并发编程(七)——Java中的线程池

线程池的实现原理(1)线程判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。(2)线程池判断工作队列是否已满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。(3)线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。线程池的使用向线程池提交任务...

2020-10-12 18:31:39 132 1

原创 Java并发编程(六)——Java中的并发工具类

等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。join用于让当前执行线程等待join线程执行结束。其实现原理是不停检查join线程是否存活,如果join线程存活则让当前线程永远等待。直到join线程中止后,线程的this.notifyAll()方法会被调用,调用notidyAll()方法是在JVM里实现的。同步屏障CyclicBarrier让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,

2020-10-12 11:22:24 141

原创 Java并发编程(五)——Java并发容器和框架

ConcurrentHashMap的实现原理与应用1、线程不安全的HashMapHashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。2、效率低下的HashTableHashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法,其他线程也访问H

2020-10-12 11:10:30 121

原创 Java并发编程(四)——Java中的锁

Lock接口一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。Lock接口提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常

2020-10-11 11:07:53 73

原创 Java并发编程(三)

线程在一个进程里可以创建多个线程,这些线程都拥有各自的计算器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。一个线程在一个时刻只能运行在一个处理器核心上。将数据一致性不强的操作派发给其他线程处理(也可以使用消息队列)。线程优先级在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(iht)的方法来修改优先级,默认优先级是5,优先级高的线程分配时间片

2020-10-10 09:58:18 86

原创 高性能MySQL(二)——Schema与数据类型优化

选择优化的数据类型1、更小的通常更好一般情况下,应该尽量使用可以正确存储数据的最小数据类型。更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更少。2、简单就好简单数据类型的操作通常需要更少的CPU周期。3、尽量避免NULL很多表都包含可为NULL(空值)的列,即使应用程序并不需要保存NULL也是如此,这是因为可为NULL是列的默认属性。通常情况下最好指定列为NOT NULL,除非真的需要存储NULL值。可为NULL的列使得索引、索引统计和值比较都更

2020-10-03 19:55:34 63

原创 Java并发编程(二)——Java内存模型

Java内存模型并发编程的两个关键问题:线程之间如何通信及线程之间如何同步1、线程之间的通信机制有两种:共享内存和消息传递在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。2、同步是指程序中用于控制不同线程间操作发生相对顺序的机制。在共享内存并发模型里,同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。在消息传递的并发模型里,由于消息的发

2020-10-02 22:22:42 79

原创 高性能MySQL(一)——MySQL架构

MySQL逻辑架构最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工作或者服务都有类似的架构。比如连接处理、授权认证、安全等等。第二层架构是MySQL比较有意思的部分。大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数(例如,日期、时间、数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。服务器通过API与存储引擎进行通信。这些接口屏蔽了不同存储引

2020-10-02 10:54:56 171

原创 Java并发机制的底层实现原理

volatile的应用volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。可见性是指当一个线程修改一个共享的变量时,另一个线程能读到这个修改的值。volatile的定义与实现原理Java编程语言运行线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排它锁单独获得这个变量。如果一个字段被声明成volat

2020-09-27 18:59:42 66

原创 深入Java虚拟机(四)——虚拟机字节码执行引擎

运行时栈帧结构栈帧是用于支持虚拟机进行方法调用好方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。在编译代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写入到方法表的Code属性中,因此一个栈帧需要分配多少内存,不会受到程序运行期变量数的影响。局部变量表局部变量表是一组变量值存储空间,用于存放方法参数和方

2020-09-24 21:29:33 51

原创 深入Java虚拟机(三)——虚拟机类加载机制

虚拟机类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。类型的加载、连接和初始化过程都是在程序运行期间完成的。类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparing)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准

2020-09-24 19:55:55 87

原创 深入理解Java虚拟机(三)——类文件结构

Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。Class文件格式只有两个数据类型:无符号数和表。无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用

2020-09-24 08:17:19 58

原创 深入Java虚拟机(二)——垃圾收集器与内存分配策略

引用计数算法给对象添加一个引用计算器,每当有一个地方引用它时,计算器数值就加1;当引用失效时,计算器数值就减1;任何时刻计数器为0的对象就是不可能再被使用的。Java虚拟机没有选用引用计数算法进行内存管理,最主要的原因是它很难解决对象之间相互循环引用的问题。可达性分析算法通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,证明此对象是不可用的。可作为GC Roots的对象包括以下几种:(1)

2020-09-22 18:22:48 61

原创 深入Java虚拟机(一)——Java内存区域

运行时数据区域1、程序计数器:“线程私有”,可以看作是当前线程所执行的字节码的行号指示器。2、Java虚拟机栈:“线程私有”,描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。(1)局部变量表存放了编译器可知的各种基本数据类型、对象引用和returnAddress类型(指向了一条字节码指令的地址)。(2)局部变量表所需的内存空间在编译期间完成分配

2020-09-20 12:23:15 65

原创 Springboot项目——模仿天猫(四)

产品属性管理查询增加编辑修改删除

2020-03-31 12:06:32 190

原创 Springboot项目——模仿天猫(三)

分类管理CRUD增加: post //Controller @PostMapping("/categories") public Object add(Category bean, MultipartFile image, HttpServletRequest request) throws Exception { categoryService.add(bean)...

2020-03-30 11:59:10 200

原创 Springboot项目——模仿天猫(二)

项目结构后端comparator比较器:先把数据都从数据库取出来,然后再排序。1.ProductAllComparator 综合比较器 根据 销量*评价 排序2.ProductDateComparator 新品比较器 根据 创建日期 排序3.ProductPriceComparator 价格比较器 根据 价格 排序4.ProductR...

2020-03-28 14:47:29 387

原创 Springboot项目——模仿天猫(一)

Springboot项目——模仿天猫(一)创建表User表和Category表无箭头指向,因此无外键,优先建立。Property表的外键(cid)指向Category表的id。Product表的外键(cid)指向Category表的id。PropertyValue表有两个外键,ptid指向Property表的id,pid指向Product表的id。ProductImage表的外键(p...

2020-03-27 22:48:05 489

原创 TCP/UDP协议

TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应...

2018-12-06 09:17:36 98

空空如也

空空如也

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

TA关注的人

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