06 2023 档案
摘要:# 12 方法上的 synchronized >```java >//普通方法上加synchronized >class Test{ > public synchronized void test() { > > } >} >//等价于 >class Test{ > public void test
阅读全文
摘要:# 11 临界区与竞态条件 ## 临界区 Critical Section * 一个程序运行多个线程本身是没有问题的 * 问题出在多个线程访问**共享资源** * 多个线程读**共享资源**其实也没有问题 * 在多个线程对**共享资源**读写操作时发生指令交错,就会出现问题 * 一段代码块内如果存在
阅读全文
摘要:# 10 线程的状态 ## 操作系统层面的线程状态  1. **初始状态** 仅是在语言层面创建了线程对象,还未与操
阅读全文
摘要:# 9 守护线程 ## 什么是守护线程 默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。 ## 守护线程实例 >```java >import java.util.concurre
阅读全文
摘要:# 8 Interrpt()和IsInterrupted() ## **interrupt()的效果** 如果被打断线程正在 sleep,wait,join 会导致被打断的线程抛出 InterruptedException,并清除 **打断标记**;如果打断的正在运行的线程,则会设置 **打断标记*
阅读全文
摘要:# 7 Join方法 ## join方法的作用 假设在主线程中调用子线程的join方法,主线程会在join方法处**等待子线程执行完之后**,再继续进行下去。这个过程也就是一个**同步**的过程。 ## 什么是同步 以调用方角度来讲,如果 **同步:**需要等待结果返回,才能继续运行就是同步
阅读全文
摘要:# 6 sleep与yield的比较 ## sleep 1. 调用 sleep 会让当前线程从 *Running* 进入 *Timed Waiting* 状态(阻塞) 2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedExcept
阅读全文
摘要:# 分布式事务、CAP理论、BASE理论 ## 什么是分布式事务? ### 首先理解什么是本地事务? 平常我们在程序中控制事务是利用数据库本身的事务特性来实现的,比如spring中的@Transactional注解,因此叫**数据库事务**。由于应用主要靠关系数据库来控制事务,此数据库只属于该应用,
阅读全文
摘要:# 高并发下的缓存雪崩 ## 什么是缓存雪崩 缓存雪崩是缓存中**大量key失效**后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 造成缓存雪崩问题的原因是是大量key拥有了相同的过期时间,比如对课程信息设置缓存过期时间为10分钟,在大量请求同时查询大量的课程信息时,
阅读全文
摘要:# 高并发下的缓存击穿 ## 什么是缓存击穿 缓存击穿是指大量并发访问同一个热点数据,当热点数据失效后同时去请求数据库,瞬间耗尽数据库资源,导致数据库无法使用。比如某手机新品发布,当缓存失效时有大量并发到来导致同时去访问数据库。 ## 如何解决缓存击穿 1. **使用同步锁控制查询数据库的线程**
阅读全文
摘要:# 高并发下的缓存穿透 ## 什么是缓存穿透 大量并发去访问一个数据库不存在的数据,由于缓存中没有该数据导致大量并发查询数据库,这个现象要缓存穿透。缓存穿透可以造成数据库瞬间压力过大,连接数等资源用完,最终数据库拒绝连接不可用。 ## 如何解决缓存穿透 1. 对请求增加校验机制 比如:课程Id是长整
阅读全文
摘要:什么是熔断降级 微服务中难免存在服务之间的远程调用,比如:内容管理服务远程调用媒资服务的上传文件接口,当微服务运行不正常会导致无法正常调用微服务,此时会出现异常,如果这种异常不去处理可能导致雪崩效应。 微服务的雪崩效应表现在服务与服务之间调用,当其中一
阅读全文
摘要:## java获取cpu核心数目 >```java >int processors = Runtime.getRuntime().availableProcessors(); >```
阅读全文
摘要:## 线程上下文切换(Thread Context Switch) 上下文切换(Context Switch)是指:因为以下一些原因导致 cpu 不再执行当前的线程,转而执行另一个线程的代码 ,导致上下文切换的原因有如下等: * 线程的 cpu 时间片用完 * 垃圾回收 * 有更高优先级的线程需要运
阅读全文
摘要:## 创建线程的几种方式 ### 方式1 重写Thread中的run方法 >```java >//方式一 重写Thread中的run方法 >public class CreateThread1 { > public static void main(String[] args) { > //指定线程
阅读全文
摘要:## 查看线程和进程的方法 ### 1. windows * 任务管理器可以查看进程和线程数,也可以用来杀死进程 * tasklist 查看进程 * taskkill 杀死进程 ### 2. linux * ps -fe 查看所有进程 * ps -fT -p 查看某个进程(PID)的所有线程 * k
阅读全文
摘要:线程中的常用方法 方法名 static 功能说明 注意事项 start() 启动一个新线 程,在新的线程运行 run 方法 start 方法只是让线程进入就绪,里面代码不一定立刻运行( CPU 的时间片还没分给它)。每个线程对象的start方法只能调用一次,如果调用了多次会出现IllegalThre
阅读全文