WilldasK
码龄13年
求更新 关注
提问 私信
  • 博客:185,294
    社区:381
    185,675
    总访问量
  • 38
    原创
  • 153
    粉丝
  • 109
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:内蒙古
加入CSDN时间: 2013-12-12
博客简介:

Willdas博客

博客描述:
学习只是为了原地踏步。
查看详细资料
个人成就
  • 获得260次点赞
  • 内容获得7次评论
  • 获得215次收藏
  • 博客总排名2,379,128名
创作历程
  • 24篇
    2024年
  • 4篇
    2022年
  • 1篇
    2020年
  • 5篇
    2018年
  • 5篇
    2016年
成就勋章
TA的专栏
  • SpringCloud
    2篇
  • Spring
    1篇
  • 分布式
    1篇
  • 中间件
    3篇
  • 多线程
    7篇
  • JVM
    5篇
  • 前端
    1篇
  • Java
    7篇
  • SpringBoot
    4篇
  • 问题集合
    2篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 13

TA参与的活动 0

兴趣领域 设置
  • Java
    java
  • 数据结构与算法
    数据结构
  • 前端
    vue.js
  • 后端
    spring boot中间件spring cloud
创作活动更多

「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令

谁说嵌入式只会“Ctrl+C 调包”和“拿电烙铁焊板子”?2026嵌入式全栈技术征锋令正式启幕! 本次活动专为硬核硬件/软件开发者打造,无论你是刚玩转裸机外设的萌新,还是精通RTOS调度、死磕底层驱动的行业老手,亦或是执掌系统架构的大神,这里都是你证明实力的舞台! 拒绝表面功夫,每一行代码,都有撬动硬件的力量!晒出你的硬核工程实战,为嵌入式开发者的全栈硬实力正名!

212人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。
原创
博文更新于 2024.12.09 ·
429 阅读 ·
7 点赞 ·
0 评论 ·
1 收藏

synchronized、volatile区别

这里从哪读取我并不明确,一般来说应该是先在进行修改的缓存A中修改为新值,然后通知其他缓存清除掉此变量,当其他缓存B中的线程读取此变量时,会向总线发送消息,这时存储新值的缓存A获取到消息,将新值传给B。当变量需要更新时都是此步骤,volatile的作用是被其修饰的变量,每次更新时,都会刷新上述步骤。如果缓存在处理器的缓存行中,内存区域在LOCK操作期间被锁定,当它执行锁操作,回写主内存时,处理器不在总线锁上声言LOCK#信号,而是修改内部内存地址,并允许它的缓存一致性机制来保证操作的原子性。
原创
博文更新于 2024.11.25 ·
808 阅读 ·
24 点赞 ·
0 评论 ·
23 收藏

轻量级锁的理解

轻量级锁是指当锁是偏向锁的时候,却被另外的线程所访问,此时偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁(CAS),线程不会阻塞,从而提高性能。
原创
博文更新于 2024.11.24 ·
524 阅读 ·
5 点赞 ·
0 评论 ·
7 收藏

偏向锁的理解

偏向锁是指当一段同步代码一直被同一个线程所访问时,即不存在多个线程的竞争时,那么该线程在后续访问时便会自动获得锁,从而降低获取锁带来的消耗,即提高性能。
原创
博文更新于 2024.11.19 ·
460 阅读 ·
8 点赞 ·
0 评论 ·
5 收藏

乐观锁的一种实现方式-CAS

CAS是一项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。
原创
博文更新于 2024.11.18 ·
632 阅读 ·
5 点赞 ·
0 评论 ·
9 收藏

ReentrantLock的具体实现细节是什么

在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并不是为了替代 synchronized,而是在 synchronized 不适用的情况下,提供一种可以选择的高级功能。
原创
博文更新于 2024.11.17 ·
916 阅读 ·
15 点赞 ·
0 评论 ·
25 收藏

AbstractQueuedSynchronizer

AbstractQueuedSynchronizer本质是一个队列(Queue),其内部维护着FIFO的双向队列,也就是CLH队列。/*** The synchronization state. 使用的是volatile修饰* state变量表示锁的状态* 0 表示未锁定* 大于0表示已锁定* 需要注意的是,这个值可以用来实现锁的【可重入性】,例如 state=3 就表示锁被同一个线程获取了3次,想要完全解锁,必须要对应的解锁3次* 同时这个变量还是用volatile关键字修饰的,保证可见性。
原创
博文更新于 2024.11.15 ·
1014 阅读 ·
17 点赞 ·
0 评论 ·
17 收藏

线程的状态有哪些?它是如何工作的?

首先先要创建线程并指定线程需要执行的业务方法,然后再调用线程的 start() 方法,此时线程就从 NEW(新建)状态变成了 RUNNABLE(就绪)状态,此时线程会判断要执行的方法中有没有 synchronized 同步代码块,如果有并且其他线程也在使用此锁,那么线程就会变为BLOCKED(阻塞等待)状态,当其他线程使用完此锁之后,线程会继续执行剩余的方法。run() 方法为 Runnable 的抽象方法,必须由调用类重写此方法,重写的 run() 方法其实就是此线程要执行的业务方法。
原创
博文更新于 2024.11.14 ·
794 阅读 ·
8 点赞 ·
0 评论 ·
20 收藏

volatile、ThreadLocal的使用场景和原理

java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。当线程没有结束,但是ThreadLocal已经被回收,则可能导致线程中存在ThreadLocalMapnull, Object>的键值对,造成内存泄露。虽然ThreadLocal的get,set方法可以清除ThreadLocalMap中key为null的value,但是get,set方法在内存泄露后并不会必然调用,所以为了防止此类情况的出现,我们有两种手段。示例2(Session管理)
原创
博文更新于 2024.11.13 ·
917 阅读 ·
10 点赞 ·
0 评论 ·
20 收藏

Tomcat最全调优指南

Tomcat最全的调优指南
原创
博文更新于 2024.11.11 ·
628 阅读 ·
3 点赞 ·
1 评论 ·
4 收藏

Java线程CPU占用过高如何排查?

使用排查命令可以找到占用CPU过高的线程,根据线程堆栈信息可以分析线程的运行情况,找到占用CPU过高的原因。
原创
博文更新于 2024.11.11 ·
778 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

Java中对象的创建过程

首先代码中new关键字在编译后,会生成一条字节码new指令,当虚拟机遇到一条字节码new指令时,会根据类名去方法区运行时常量池找类的符号引用,检查符号引用代表的类是否已加载,解析和初始化过。如果垃圾收集器是CMS这种基于清除算法的收集器时,Java堆中的空闲内存和已使用内存是相互交错的,虚拟机会维护一个列表,记录哪些可用,哪些不可用,分配时从表中找到一块足够大的空闲内存分配给实例对象,并且更新表。在构造一个类的实例对象时,遵循的原则是先父后子,先静后动,先变量,后代码块,再构造器。
原创
博文更新于 2024.11.11 ·
217 阅读 ·
8 点赞 ·
0 评论 ·
1 收藏

ThreadLocal什么时候会出现OOM的情况?如何避免

比较两种情况,我们可以发现:由于ThreadLocalMap的生命周期跟Thread一样长,如果都没有手动删除对应key,都会导致内存泄漏,但是使用弱引用可以多一层保障:弱引用ThreadLocal不会内存泄漏,对应的value在下一次ThreadLocalMap调用set、get、remove的时候会被清除。(2)key 使用弱引用:引用的ThreadLocal的对象被回收了,由于ThreadLocalMap持有ThreadLocal的弱引用,即使没有手动删除,ThreadLocal也会被回收。
原创
博文更新于 2024.11.11 ·
541 阅读 ·
12 点赞 ·
0 评论 ·
2 收藏

什么时候出现线程安全,如何实现线程安全?

多线程的环境下,多个线程共享某块内存空间,并且这块共享的内存空间涉及到数据的修改
原创
博文更新于 2024.11.11 ·
358 阅读 ·
5 点赞 ·
0 评论 ·
0 收藏

创建线程的几种方式

(4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。(1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得。(3)call方法可以抛出异常,run方法不可以。Runnable和Callable的区别是,
原创
博文更新于 2024.11.11 ·
247 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

为什么要创建线程池?创建线程池的方式有哪些

java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池一个线程池包括以下四个基本组成部分:1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;2、工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;
原创
博文更新于 2024.11.11 ·
433 阅读 ·
5 点赞 ·
0 评论 ·
5 收藏

线程池执行流程

线程池执行流程
原创
博文更新于 2024.11.11 ·
562 阅读 ·
12 点赞 ·
0 评论 ·
0 收藏

线程池核心参数有哪些

当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务。当线程池的核心线程都在处理任务时,如果来了新的任务就会被缓存到任务队列中排队等待执行。当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常。7、rejectedExecutionHandler:指定线程池拒绝策略。6、threadFactory:线程的创建工厂。3、keepAliveTime:线程存活时间。5、workQueue:线程池执行的任务队列。4、unit:存活时间单位,
原创
博文更新于 2024.11.11 ·
580 阅读 ·
14 点赞 ·
0 评论 ·
0 收藏

ClassLoader加载类的原理

ClassLoader使用的是双亲委托模型来搜索类的,每个ClassLoader实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap ClassLoader)本身没有父类加载器,但可以用作其它ClassLoader实例的的父类加载器。
原创
博文更新于 2024.11.11 ·
910 阅读 ·
23 点赞 ·
0 评论 ·
15 收藏

Java多线程内存模型

锁的内存语义:当线程释放锁时,JVM会将该线程的本地内存中的共享变量刷新到主内存中 获取锁的内存语义:当线程获取锁时,JVM会将该线程的本地内存设置为无效,从而使被监听器保护的临界区代码必须从主内存中读取共享变量。线程之前的共享变量存储在主内存中,每个线程有一个私有的本地内存(工作内存),本地内存(工作内存)存储的是该线程以读写的共享变量副本。写的内存语义:当写一个volatile变量时,JVM会将该线程的本地内存中的共享变量刷新到主内存中。可见性:读取一个变量的值,可以立即看到其他线程对此变量的修改。
原创
博文更新于 2024.11.11 ·
380 阅读 ·
5 点赞 ·
0 评论 ·
3 收藏
加载更多