随笔分类 - 源码
源码
摘要:1 前言 首先说下为什么会产生这样的疑惑哈,最近在看Spring-retry的时候,发现: 其次我们再来看个现象,@Component 声明了一个Bean,内部有个单例AService,当我们调用两次 aService() 发现得到的对象不一样: @Component public class De
阅读全文
摘要:1 前言 我们平时创建线程出来,可能会因为某种情况不想让线程继续运行了,放弃掉任务,那么这节我们就来看看如何停止一个线程。 Java中线程的stop()、suspend()、resume()三个方法都已经被弃用,所以不再使用这些方法停止线程。 2 终止方法 (1)我们只能调用线程的interrupt
阅读全文
摘要:1 前言 本节我们讲下Thread.yield()方法的作用,并对比下sleep()方法、wait()方法,看看三者有何区别。 2 yield 方法 作用是:提出释放CPU时间片的请求,不会释放锁,主要知道它不会阻塞线程即可哈,平时我是没怎么用过哈。特点就是:(1)yield()方法只是提出申请释放
阅读全文
摘要:1 前言 上节我们看了线程是如何创建启动的,那么启动以后线程怎么管理呢,这就要看我们线程的状态管理了,这节我们就来看看线程都有哪些状态以及什么操作下会驱使状态的变化流转。 2 状态定义 Java线程有6种状态定义在Thread的子类State,分别是NEW、RUNNABLE、BLOCKED、WAIT
阅读全文
摘要:1 前言 本节开始我们来回顾下线程基础相关的东西,最近在复习所以来做一些笔记哈,这节我们来讲讲创建线程的方式。 线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对
阅读全文
摘要:1 前言 看了wait()方法之后,我们再来讲讲join()方法,因为join()方法就是通过wait()方法实现的。 2 含义 让主线程等待(WAITING状态),一直等到其他线程不再活动为止。join在英语中是“加入”的意思,join()方法要做的事就是,当有新的线程加入时,主线程会进入等待状态
阅读全文
摘要:1 前言 本节我们来看下关于线程的一些方法,wait()、notify()、notifyAll(),来理解他们内部做的事情。 2 含义 我们先来看下这三个方法的归属,都是属于Object的方法,因为这些方法都是要跟Synchronized来搭配使用的,就涉及到锁对象,而锁对象可以是任意引用对象,所以
阅读全文
摘要:1 前言 这节我们来讨论下 Spring MVC 传统和现在的启动方式的不同,可能大家现在上手就是SpringBoot直接给我们内置Tomcat,我们最多也就是改改配置就完事了,我记得我上学的时候写SSM的时候,还要整理各种Jar包和配置,这节我们就来对比下两种启动方式是如何启动Spring MVC
阅读全文
摘要:1 前言 我们应该知道的是Spring MVC其实就是一个Servlet,而我i们平时使用最多的Servlet容器就是Tomcat,那么两者是如何关联到一起的呢,这节我们就来看下。 2 请求过程 我们先来从上层视角浅化的了解一下请求的处理过程,如下图: (1)用户和Tomcat间建立连接并通过网络发
阅读全文
摘要:1 前言 这节我们来实际的用一用JVM平时常用的调优命令,来实际体验回顾一下。这里我直接用的是我们生产环境的一个Pod里,来真实的带大家体验一下。 2 jps jps大家应该都知道吧,就是列出当前的java进程有哪些: 3 jmap 3.1 jmap ‐histo 此命令可以用来查看内存信息,实例个
阅读全文
摘要:Java HotSpot VM中 -XX: 的可配置参数列表进行描述;这些参数可以被松散的聚合成三类: 行为参数(Behavioral Options):用于改变jvm的一些基础行为; 性能调优(Performance Tuning):用于jvm的性能调优; 调试参数(Debugging Optio
阅读全文
摘要:1 前言 这节也是我们线程池的最后一节咯,我们这节来总结一下。 2 线程池总结 线程池篇我们讲解了两种线程池,一种是ThreadPoolExecutor线程池、另外一种是ScheduledThreadPoolExecutor线程池。 2.1 ThreadPoolExecutor 线程池 关于Thre
阅读全文
摘要:1 前言 这节我们来讲点别的东西,专门来分析一下定时任务、延迟任务的实现。 2 对比分析 前面我们讲解的ScheduledThreadPoolExecutor,这个线程池可以进行延迟任务、定时任务的调度,底层依赖的是DelayedWorkQueue这个阻塞队列。DelayedWorkQueue这个延
阅读全文
摘要:1 前言 上一节我们看了ScheduledThreadPoolExecutor线程池提交任务的流程。execute、submit、schedule、scheduleAtFixRate方法的原理:都是将任务封装为一个ScheduledFutureTask,然后提交到延迟阻塞队列里面,然后线程池里的线程
阅读全文
摘要:1 前言 前面我们主要看了ThreadPoolExecutor线程池。包括线程池内部有哪些核心的参数、每个参数的含义,通过向线程池提交任务的execute方法的内部逻辑以及执行流程是什么,通过FutureTask获取任务执行结果,以及阻塞、唤醒调用线程和线程池内部的工作者Worker的工作原理,线程
阅读全文
摘要:1 内容回顾 前面四节的内容我们大概看了线程池的:(1)线程池的基本用法(2)线程池种类ExecuteService这类型的线程池,代表的子类是ThreadPoolExecutor,这种类型的线程池是当有线程空闲的时候立即会执行你提交的任务。还有一种类型的线程池ScheduledExecutorSe
阅读全文
摘要:1 前言 上一节我们看了ThreadPoolExecutor线程池的核心参数、怎么通过这些参数构建和设计线程池的、向线程池提交任务的execute方法内部流程、线程池内部Worker工作者的原理,今天就来看一下ThreadPoolExecutor线程池一些其它方法,比如线程池的预热、关闭、线程池的一
阅读全文
摘要:1 前言 上一节我们看了ThreadPoolExecutor线程池的execute内部方法流程,addWorker方法流程,看到Worker是线程池内部的工作者,每个Worker内部持有一个线程,addWorker方法创建了一个Worker工作者,并且放入HashSet的容器中,那么这节我们就来看看
阅读全文
摘要:1 前言 上一节我们看了线程池的状态和数量的计数以及提供的拒绝策略,这节我们就要看线程池的运行原理,那么在了解原理之前不知道大家对线程池有没有这样的疑问:比如线程池的线程数量是怎么进行增长的?随着任务的不断提交,线程池中的线程数量什么时候线程数量达到corePoolSize?什么时候线程数达到max
阅读全文
摘要:1 前言 上一节我们对线程池以及它的基本使用做了介绍,后面我们就开始分析线程池内部的原理了,内部的核心流程是怎么设计的,那么这节我们先来分析一下ThreadPoolExecutor这个线程池的有哪些属性,以及这些属性代表什么意思。 2 线程池状态和线程数量的表示 首先来看下ThreadPoolExe
阅读全文

浙公网安备 33010602011771号