0%

AQS简介

AQS(AbstractQueuedSynchronizer)是一个模板类,其提供一个先进先出(FIFO)的等待队列,旨在为大多数依赖单个原子int值表示状态的同步器提供有用的基础。

AQS类支持默认的排他锁和共享锁之一或两者。在排他锁模式下获取时,其他线程尝试获取是不会成功的,共享模式由多个线程获取可能会(但不一定)成功。AQS类不会“理解”这些区别,只是锁意义上说,当成功获取共享模式时,下一个等待线程(如果存在)也必须确定它是否也能够获取。在不同模式下等待的线程共享相同的FIFO队列。

Read more »

单例模式在开发中会经常用到,那么如何实现一个优雅的单例就显的尤为重要.在实现的时候,我们需要根据具体情况考量如下信息:

  • 是否需要线程安全?
  • 是否需要懒加载?
Read more »

init config

1
2
3
4
5
6
$ git config  --global user.name lazycece
$ git config --global user.email lazycece@gmail.com
$ git config --global color.ui auto
$ git config --global color.status auto
$ git config --global color.branch auto
$ git config --global color.diff auto
Read more »

BsonUndefined 转换问题

关于这个问题的出现,是在业务中使用存储函数时,如果某个字段值为null,存入到数据库中会出现undefined,而随后查询会抛出ConverterNotFoundException异常信息,如下所示:

1
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.bson.BsonUndefined] to type [java.lang.Integer]
Read more »

文件上传是一个很常见的功能,在业务场景中其又可分为单文件上传、分片上传、断点续传、秒传等。

一个小文件上传在一个http连接便可以很快的完成,其无需担心上传失败重新上传的问题。而一个大文件的上传则不能这样,试想一个场景:10G的文件直接上传,如果上传一方的网速很好,服务器的网络带宽很小,那么服务器的带宽全被这个上传连接占用,其他人上传文件则已没有带宽可用;如果在网速较差的环境下上传,快要上传完成的时候网络中断,又得重新上传,一定会抓狂。

Read more »

这里以 ubuntu18.04 LTS 系统为例

查看系统内核版本:

1
uname -a

查看已安装内核信息,确认需要安装的相应包:

1
sudo dpkg --get-selections |grep linux
Read more »

顾名思义,ThreadLocal是为线程提供私有的局部变量。它不同于其他常规的变量,需要使用自身的getset方法来获取和设置值。ThreadLocal的典型应用是在类中被申明为静态变量,用于关联用户ID、事务ID,亦或者其他需要线程独有的属性。

对于ThreadLocal,只要该线程处于活动状态并且ThreadLocal实例是可访问的,每个线程都保留对其本地线程副本的隐式引用。如果线程消失后,其所有副本线程本地实例便会受到垃圾回收(除非其他情况,即线程外存在对这些副本的引用)。

Read more »

rocketmq支持有序的发送消息,有序的消费消息,这里便来看一下如何实现?

实战方面均以RocketMQTemplate形式展现,集成方案详见《springboot中rocketmq的集成与使用》

消息的有序发送方面,我们可以直接使用syncSendOrderly(同步有序发送)和asyncSendOrderly(异步有序发送)两种类型的方法进行发送消息,他们的区别就如命名一样是同步和异步的区别。

Read more »