吴顺达
码龄6年
关注
提问 私信
  • 博客:135,268
    135,268
    总访问量
  • 83
    原创
  • 2,041,048
    排名
  • 44
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:浙江省
  • 加入CSDN时间: 2019-03-08
博客简介:

wsdfym的博客

查看详细资料
个人成就
  • 获得89次点赞
  • 内容获得44次评论
  • 获得268次收藏
  • 代码片获得162次分享
创作历程
  • 6篇
    2021年
  • 23篇
    2020年
  • 54篇
    2019年
成就勋章
TA的专栏
  • 锁
    4篇
  • 多线程
    7篇
  • RabbitMQ
    18篇
  • 集合
    11篇
  • 数据结构
    4篇
  • jvm
    2篇
  • ZooKeeper
    3篇
  • 笔记
    1篇
  • 反射
  • 设计模式
    1篇
  • Mybatis
  • kafka
    1篇
  • 理论知识
    3篇
  • Netty
  • NIO
    1篇
  • Redis
    5篇
  • spring源码
  • linux
  • Java web
  • JavaSE
    25篇
  • MySQL
    10篇
  • Spring
    7篇
  • SpringIOC
    2篇
  • SpringMVC
    2篇
兴趣领域 设置
  • 大数据
    redis
  • 后端
    spring架构
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

FutureTask 源码阅读 使用Callable创建多线程

接上文线程池源码阅读线程池调用Future<?> submit(Runnable task);返回一个FutureTsk。简单使用public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTask<Integer> future = new FutureTask(new MyCallable()); Thread th
原创
发布博客 2021.03.05 ·
368 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

了解JVM垃圾回收器

Serial收集器这个收集器是一个单线程工作的收集器。使用一个收集线程去完成垃圾收集工作它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束(“Stop The World”)Serial Old收集器ParNew收集器实质上是Serial收集器的多线程并行版本,除了同时使用多条线程进行垃圾收集之外,其余的行为都与Serial收集器一致Parallel Scavenge收集器Parallel Old收集器CMS收集器Garbage First收集器Shenandoah收集
原创
发布博客 2021.02.21 ·
231 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

JVM垃圾回收算法

标记-清除算法算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象。也可以反过来,标记存活的对象,统一回收所有未被标记的对象。标记过程就是对象是否属于垃圾的判定过程。标记-复制算法标记-整理算法...
原创
发布博客 2021.02.20 ·
168 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

FastJson 泛型解析出错解决

java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannotbe cast to X有问题的写法:data = (A) JSON.parseObject(str,A.class);修改之后data = JSON.parseObject(str, new TypeReference<A<T>>(){});
原创
发布博客 2021.02.03 ·
684 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

SpringBoot 整合RabbitMQ使用

添加用户。none不能访问 management pluginmanagement列出自己可以通过AMQP登入的virtual hosts查看自己的virtual hosts中的queues, exchanges 和 bindings查看和关闭自己的channels 和 connections查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。policymaker查看、创建和删除自己的virtual hosts所属的po
原创
发布博客 2021.02.06 ·
526 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

手把手带你实现 rabbitmq 保证消息不丢失 MQ消息稳定性

MQ运行图哪些步骤会发生消息丢失生产者到MQ之间丢失,网络抖动通信异常。MQ中的消息还没有完成异步存盘,MQ宕机,再重启消息丢失。消费者获取到消息之后,没有来得及处理完毕,自己直接宕机了。属于操作不当,消费者没有将消息投递到对应的Exchange中导致消息丢失解决方案MQ宕机之后消息丢失开启消息持久化MQ将消息持久化到磁盘中通常情况是,等到有几千条消息的时候,会一次性的刷盘到磁盘上面。消息在MQ内存中还没有刷盘到磁盘就宕机了,消息依旧还是会丢失。需要下面的confirm机制,co
原创
发布博客 2021.03.06 ·
476 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

循环依赖的解决

是什么循环依赖,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:代码中的体现@Componentpublic class A { // A中注入了B @Autowired private B b;}@Componentpublic class B { // B中也注入了A @Autowired private A a;}解决循环依赖的本质先去缓存Map里找Bean,没有则
原创
发布博客 2020.12.23 ·
465 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

FactoryBean的使用

FactoryBean的用法在某些情况下,实例化bean过程比较复杂,如果还是采用配置的方法,需要在中提供大量的配置信息,配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。Spring为此提供了一个FactoryBean的工厂类接口,用户可以通过实现该接口定制实例化bean的逻辑。public interface FactoryBean<T> { T getObject() throws Exception; Class<?> get
原创
发布博客 2020.12.21 ·
789 阅读 ·
0 点赞 ·
1 评论 ·
1 收藏

Condition 源码学习

Condition 解析
原创
发布博客 2020.12.16 ·
214 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ReentrantReadWriteLock 源码学习

是什么读写锁在同一时刻可以允许多个读线程访问,但是写线程操作时,所有的读线程和其他写线程均被阻塞。使用例子public class LockTest { private static ReadWriteLock lock = new ReentrantReadWriteLock(); /** * 读取资源 */ public void read() throws InterruptedException { lock.readLock().
原创
发布博客 2020.12.15 ·
166 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

可重入锁 ReentrantLock AQS 源码解析

使用范例Lock lock = new ReentrantLock();lock.lock();try { dosomething();} finally { lock.unlock();}在finally块中释放锁,目的是保证在获取到锁之后,最终能够被释放。接口结构Lock是个顶级接口,构建了锁的生态环境void lock();获取锁。如果该锁不可用,则出于线程调度目的,当前线程将被禁用,并处于休眠状态,直到获得该锁为止void lockInterru
原创
发布博客 2020.12.11 ·
342 阅读 ·
0 点赞 ·
2 评论 ·
1 收藏

JAVA 线程池ThreadPoolExecutor源码阅读与分析

线程池是什么提前创建好若干个线程,如果有任务需要处理,这些创建好的线程就会开始处理任务,处理完之后线程并不会被销毁而是被保存起来,而是等待下一个任务。为什么需要线程池创建和销毁线程都是消耗系统资源的。线程模型又分为用户线程,与内核线程。用户线程ULT用户程序实现的,不依赖系统核心,应用自己管控线程,不需要进行用户态/内核态的切换。操作系统内核无感知。内核线程KLT系统内核管控,内核保存上下文状态和信息,多处理器情况上能并发运行,线程的创建于同步由内核完成,能够调度CPU资源。一个小测试
原创
发布博客 2020.12.09 ·
323 阅读 ·
2 点赞 ·
2 评论 ·
2 收藏

JAVA retry 使用

简介retry不是关键字他是一个标记有点类似于goto,goto是Java中的保留字,在目前版本的Java中没有使用。retry后面跟循环,标记这个循环开始的位置。后续在continue或者break后面加retry。continue retry从这个标记的循环继续执行,不是重新开始,而是继续执行。break retry跳过这个标记的循环break retry 例子public static void main(String[] args) { retry: for
原创
发布博客 2020.12.07 ·
166 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java线程池简单使用学习

常用的五种类型线程池newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutornewScheduledThreadPoolnewWorkStealingPoolnewFixedThreadPool定长线程池,控制线程最大并发数,超出的任务会在队列中等待。public static void main(String[] args) { ExecutorService pool = Executors.newFixedTh
原创
发布博客 2020.12.07 ·
213 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

多线程学习之线程的创建与终止

线程的几种创建模式通过实现Runnable接口来创建Thread线程:public class Main { public static void main(String[] args) { MyThread task = new MyThread(); Thread thread = new Thread(task); thread.start(); } static class MyThread implements Runn
原创
发布博客 2020.12.06 ·
236 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

延迟队列 DelayQueue 使用与源码解析

当内存中有一堆的客户信息,需要实时移除VIP到期的客户的特权时有以下做法。做法1:定时一段时间检查一遍所有的元素,如果客户的VIP到期日期小于当前,则取消客户的VIP特权。做法2:利用优先队列小顶堆的结构,将最快要过期的客户信息放置在堆顶,一个消费线程去poll堆顶元素并且处理,这样就不用去遍历全部的元素了。当日期不到时便让线程等待多长时间,当时间到时唤醒线程处理。以上做法2有现成的队列可以使用,就是接下来要说的延迟队列。DelayQueue结构是不是跟优先队列很像。DelayQueue其
原创
发布博客 2020.11.30 ·
372 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

PriorityQueue PriorityBlockingQueue 优先级队列与优先级阻塞队列 源码解析

试想一下,如果要在一堆数据中找出最大的或者最小的是不要进行一次遍历,时间复杂度为O(N)还能不能优化,比如O(1)的时间复杂度就能获取到。这就是这篇博客需要说的PriorityQueue优先级队列。先看结构完全二叉树:一棵有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,节点得插入永远在下一个位置。下面得紫色的那排小字就是节点的序号。那么第N个元素的左孩子queue [2 * n + 1]右孩子就是queue [2 *(n + 1)]。看到源码就会发现PriorityQueue存储
原创
发布博客 2020.11.26 ·
578 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

BlockingQueue 的使用与源码阅读

结构其中数组是循环使用的,真实中不存在从3到1的指针,使用的是putIndex,takeIndex两个下标索引。当此时存放的元素putIndex等于数组的长度-1时,putIndex下次就会变成0,又从头开始存放元素。takeIndex原理一样。基于数组实现的,并且内部持有一把ReentrantLock(读写一把)。ArrayBlockingQueue的使用简单说一下情况,后面从方法中分析。生产线程将元素放入队列中时需要先获取锁,获取到锁后向队列存放元素。消费线程获取队列中元素时也需要先获取锁,
原创
发布博客 2020.11.25 ·
148 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数组 List 去除重复数据 多种实现及性能分析

有序的情况下去重单指针法:前者与后者比01、使用两个for循环实现List去重(有序)双层针法:02、使用List集合contains方法循环遍历(有序)双层针法:contains方法调用indexof方法,内部实现还是循环遍历03、使用HashSet实现List去重(无序)04、使用TreeSet实现List去重(有序)05、使用java8新特性stream实现List去重(有序)桶排序法:...
原创
发布博客 2020.11.22 ·
423 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

万字长文 图文阅读 JDK8 ConcurrentHashMap源码 带你吊打面试官

ConcurrentHashMap结构数组+链表+红黑树。链表大于8转红黑树,红黑树节点数小于6退回链表。跟HashMap是一样的。只是支持并发的操作存放的key-value的Node节点。结构几乎一样,但是有个很重要的地方,val,next都被volatile,保证在多个线程之间的可见性。static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key
原创
发布博客 2020.11.21 ·
1549 阅读 ·
2 点赞 ·
7 评论 ·
8 收藏
加载更多