
Java
文章平均质量分 71
xiaxiaoying2012
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
spring里面的定时任务的理解
在用spring自带的定时任务编写业务代码时,只需要在类上面加上@Scheduled注解并配上cron表达式即可完成一个定时任务的开发,那么这个注解的背后原理是什么样的呢?其实spring并没有自创什么定时任务处理器,它也是用的java提供的ScheduledThreadPoolExecutor这个类实现的定时任务,所以搞清楚这个类的实现原理,也就明白了spring的定时任务的实现原理首先看一下ScheduledThreadPoolExecutor的继承关系可以看到这个类本身就是一个Thre原创 2022-05-16 18:01:04 · 670 阅读 · 0 评论 -
通过反射对比两个对象值是否相同
适用情况:两个对象属于同一个类,如果类没有重写equals方法,可通过反射对比对象属性值。如果对象的属性里面包含了数组、List、Set或者Map的时候,只会按顺序去对比这些集合里面的值,比如里面对象里面有一个List属性,里面的值是 a、b,另外一个对象的属性值是b、a,虽然两个对象的List属性的值都是a、b,但是因为顺序不同,所以这里判断这两个对象值是不同的。public class BeanCompareUtils { private static final Logger原创 2022-03-31 20:43:05 · 1705 阅读 · 0 评论 -
字符串转LocalDateTime
在使用DateTimeFormatter将字符串转成LocalDateTime时,“时”要用“HH”表示,不然转换报错例(成功):LocalDateTime dateTime=LocalDateTime.parse("2021-01-02 10:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));如下则报错:LocalDateTime dateTime=LocalDateTime.parse("2021-01-02原创 2022-02-21 14:33:32 · 15718 阅读 · 1 评论 -
lettuce执行原理
io.lettuce.core.protocol.AsyncCommand 命令io.lettuce.core.FutureSyncInvocationHandler 执行具体command命令的地方io.lettuce.core.protocol.CommandHandler 向redis服务器发送指令/从redis服务器那儿接收指令lettuce客户端通过io.lettuce.core.protocol.CommandHandler向redis服务器发送指令,并接收redis服务器返回的消息原创 2021-09-03 18:06:57 · 2162 阅读 · 0 评论 -
ReentrantLock获取锁和释放锁
ReentrantLock分为公平锁和非公平锁,也就是FairSync(公平同步器)和NonfairSync(非公平同步器)这两个同步器来实现公平锁和非公平锁FairSync和和NonfairSync都是集成AQS这个抽象队列同步器,主要是实现了AQS的tryAcquire这个方法,而这个方法就是获取锁资源,当这个方法返回true时表示当前线程获取到锁了,如果返回false则表示当前线程没有获取到锁,需要将当前线程加到获取锁的等待队列里面去。而FairSync和和NonfairSync这两个同步器的try原创 2021-08-19 14:25:26 · 454 阅读 · 0 评论 -
Spring AOP的底层原理分析
一般我们在开发springboot项目的时候通过在类上面标注@Aspect这个注释就可以实现一个AOP的功能,那这背后的实现原理是什么呢?首先我们来写一个小样例1、新建一个Aspect拦截类@Component@Aspectpublic class MyAspect { @Pointcut("execution(* y.com.testapp.*.*(..))") public void point(){} @Before("point()") publi原创 2021-02-07 17:42:15 · 843 阅读 · 1 评论 -
spring 异步编程之 @Async 的执行过程分析
spring异步编程,通过在配置类上添加@EnableAsync注解,并在需要进行异步执行的方法上添加@Async注解即可实现异步变成。先上一个例子测试a、不获取异步方法的结果先不获取异步方法的结果,看代码执行结果可以看到主线程一下在就运行完了,等了3秒过后异步方法也执行完了,说明main方法所在的主线程和异步方法不在同一个线程上执行b、当获取异步方法的结果运行结果可以看到当主线程获取异步方法的结果的时候,主线程会被阻塞。2、分析debug调试一下上面原创 2021-02-05 17:35:32 · 936 阅读 · 0 评论 -
Future实现一个简单的异步功能
在使用ThreadPoolExecutor构建线程池的时候我们可以通过调用submit()方法得到一个Future的结果,这样就实现了一个异步调用方法的功能了,现在我们自己试着来实现一个简单的异步方法1、首先来看一下Future这个接口里面有哪些内容里面比较重点的有get()和get(long,TimeUnit)这个两个方法,这两个方法也就是我们异步得到执行结果的关键点咯2、编写具体的实例public class FutureTest { volatile boolean i原创 2021-02-04 11:27:03 · 508 阅读 · 0 评论 -
Hystrix用到的几个技术
首先Hystrix用到了AOP、动态代理、观察者模式、命令模式等几个技术和方案首先来说说动态代理的实现1、动态代理a、新建一个被@HystrixCommand注解的服务类b、新建一个Controller用来接收前端Request请求上图中 HelloService利用spring的注解来生成实例c、通过浏览器访问http://localhost:{port}/ribbon/test这个路径的请求,当请求进来是dubug看helloService实例对象可以看到生成的.原创 2021-02-04 09:49:34 · 282 阅读 · 0 评论 -
springboot--实现自定义包的自动注册bean功能
当我们自己生成一个springboot项目的jar包的时候,假设我们在另外一个springboot项目里面引用我们生成的jar包,如何在这个项目启动的时候自动注册jar包里面的bean呢?方式1:在生成包的时候在META-INF这个文件夹里面生成一个spring.factories文件,在这个文件里面注册我们的config配置类方式2:使用@Enable注解的方式实现过程方式1:通过spring.factories文件注册1、构建一个spring项目 autoconfigt.原创 2021-01-05 17:49:15 · 1211 阅读 · 0 评论 -
多线程 状态 锁 的理解
1、线程状态有:a、创建状态;b、就绪状态;c、运行状态;d、等待状态;e、阻塞状态;f、结束状态其中等待状态和阻塞状态理解:当前线程调用了wait()、sleep()、join()等方法的时候会进入到等待状态。进入等待状态的线程没有机会获取cpu的使用权,只有执行了唤醒操作或者定时时间(执行了wait(时间)、sleep(时间)进入等待状态的)到了,等待状态的线程就会进入就绪状态,才有机会获...原创 2020-03-24 10:46:12 · 344 阅读 · 0 评论 -
泛型T和通配符?的理解
通过一个例子说明新建一个动物基类 Animalpublic class Animal {}新建两个子类(狗和猫)public class Dog extends Animal {}public class Cat extends Animal {}新建一个动物类型(Animal)的的类集合(假设这个类集合实现了集合功能)public class Ani...原创 2020-03-03 16:55:51 · 424 阅读 · 0 评论 -
关于Java和C#的内部类的小记
今天在看Java方面的书籍的时候看到这样一段话,说在Java中的内部类不能包含静态方法和字段,之后嵌套类中可以包含(内部类和嵌套类说的都是类中的子类,只不过嵌套类指的是静态的子类,用static修饰),我就在想C#中是不是也有这样的要求呢。于是打开编译器开始尝试,结果发现C#中的内部类是可以包含静态字段和方法的,不过在除该内部类所在的外部类之外的其他类中访问这些静态字段和方法的时候是不能通过内部类原创 2016-03-22 20:30:19 · 1148 阅读 · 0 评论 -
原来Java中的继承和C#中的继承是不一样的
因为之前在学校里学的是Java,C#是自学的,一直感觉Java和C#就像是孪生兄弟,不过今天才发现原来Java中的继承和C#中的继承还是有点不一样的 在Java中子类继承父类的方法,如果在子类重新定义了父类方法的实现,那么这个过程就是重写,且只能是重写,而在C#中不一样,在C#中可以用virtual修饰函数,表示该函数是虚函数,而Java中是没有这个关键字的,所以问题就出现在这里了。请看示例 在原创 2016-03-10 23:53:51 · 2805 阅读 · 4 评论 -
Java中implements和extends的小记
implements和extends针对Java中的类和接口有不同的用法在类中:implements后面接的是接口(后面可以跟多个接口,多个接口之间用","隔开),代表实现的意思,extends后面接的是基类(只能跟一个基类),代表扩展的含义在接口中,接口后面只能跟extends,extends后面可以接多个接口或者基类,代表扩展的含义。虽然extends和implements都用于类原创 2016-03-15 22:35:23 · 711 阅读 · 0 评论