![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
随记
文章平均质量分 77
日常基础随记
qinglong_jiao
这个作者很懒,什么都没留下…
展开
-
基于redis实现分布式锁
package com.dlss.loyalty.common.util;import com.dlss.common.redis.RedisClientTemplate;import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import redis.clients.jedis原创 2021-09-24 15:49:43 · 93 阅读 · 0 评论 -
线程的实现方式及5种状态
线程的5种状态线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态新建状态当用new操作符创建一个线程时。此时程序还没有开始运行线程中的代码就绪状态一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。处于就绪状态的线程并不一定立即运行run()方法,线程还原创 2021-07-12 11:16:00 · 172 阅读 · 0 评论 -
线程池详解及4中实现方式
什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用线程池,必须对其实现原理了如指原创 2021-07-07 09:58:15 · 355 阅读 · 0 评论 -
MySQL常见的优化方案
SQL优化的一些方法对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描例如:select id from 表名 where 字段 is null (设计表结构时,尽量把字段都设置上默认值)应尽量避免在 where 子句中使用 != 或 < > 操作符,否则将引擎放弃使用索引而进行全表扫描应尽量避免在 where 子句中原创 2021-07-06 12:54:55 · 76 阅读 · 0 评论 -
深入理解HashMap
HashMap特性HashMap存储键值对实现快速存取,允许key、value为null。key值不可重复,若key值重复则覆盖。非同步,线程不安全。底层是hash表,不保证有序(比如插入的顺序)HashMap的底层原理基于hashing的原理,jdk8后采用数组+链表+红黑树的数据结构。我们通过put和get存储和获取对象。当我们给put()方法传递键和值时,先对键做一个hashCode()的计算来得到它在bucket数组中的位置来存储Entry对象。当获取对象时,通过get获取到buck原创 2021-07-01 13:28:56 · 163 阅读 · 0 评论 -
Spring框架IOC容器和AOP解析
Spring IOC (控制反转,依赖注入)Spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则,用来消减计算机程序之间的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找IOC其实对于IOC我们一直有以下疑问:参与者都有谁?依赖:谁依赖谁?为什么需要依赖?注入:谁注入谁?什么时候注入,又注入了什么呢?控制反转:谁控制谁?控制什么?为什么叫反转呢?存在正转吗?控制反转和依赖注入是同一个概念吗?第一个问题:参与者都有谁?对象IOC/DI容器原创 2021-06-23 17:10:25 · 151 阅读 · 0 评论 -
谈谈对 ==、equals()、hashcode() 的理解
直入正题==对于引用对象而言,比较两个对象引用的是否是同一个对象。比较是的两个引用对象的存储地址是否一样。对于基本数据类型而言,比较的就是两个数据的值是否相等String a = "123";String b = "123";String c = new String("123");System.out.println(a==b); //trueSystem.out.println(a==c); //false分析1. String a = "aaa"这种方式的时原创 2021-06-22 11:09:25 · 81 阅读 · 0 评论 -
String、StringBuffer与StringBuilder之间区别
关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下三者在执行速度方面的比较:StringBuilder > StringBuffer > StringString <(StringBuffer,StringBuilder)的原因:String:字符串常量StringBuffer:字符创变量StringBuilder:字符创变量从上面的名字可以看到,String是“字符创常量”,final修饰,不可更改的对原创 2021-06-18 13:50:36 · 51 阅读 · 0 评论 -
浅谈 volatile 和 Lock 与 synchronized 的理解
Lock与synchronized 的区别ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情ReentrantLock获取锁定与三种方式a) lock().原创 2021-06-18 10:59:10 · 206 阅读 · 1 评论