- 博客(14)
- 收藏
- 关注
原创 @Value获取yml文件的map和json对象写法
yml文件: serviceCodeToUrlList: '{ "106":"https://h5-test.schengle.com/ShengDaPostalBank/carWash", "101":"https://h5-test.schengle.com/ShengDaPostalBank/airConditionClean", "102":"https://h5-test.schengle.com/ShengDaPostalBank/eighteenCheck", "1
2021-11-09 18:06:37
2384
原创 HASHMAP解决hash碰撞相关问题
1.封装类作为KEY,都是final类型保证hash值不可更改; 内部已经实现equals和hashcode方法,遵循hashmap内部规范计算准确性,有效减少hash碰撞的几率, 2.如果使用object作为key,需要重写equals和hashcode方法,equals保证key在hash表中唯一,hashcode计算存储位置; 3.不直接使用hashcode方法计算得到的哈希值作为table下标,是因为hashcode得到的int类型数据范围比较大,hashmap的数组数据范围小得多小,存储数据的范围
2020-10-01 09:16:52
1125
原创 2020-09-26
二.线程池 JDK可以创建五种类型的线程池 1.固定数量的线程池Executors.NewFixedThreadPool() -->线程数量一直不变,只有核心线程,且数量固定,没有非核心线程。keepAliveTime设置为0L,代表多余的线程会被立即终止。因为不会产生多余的线程,所以keepAliveTime是无效的参数;任务队列采用了无界的阻塞队列LinkedBlockingQueue 2.根据实际情况调整的线程数量的线程池 Executors.NewCachedThreadPool() 3.单线
2020-09-26 15:16:34
1608
原创 工作队列分类
BlockingQueue<Runnable> workQueue;-->工作队列分类 1.SynchronousQueue (同步队列)直接提交队列, 没有容量,每一个插入操作都要等待一个删除操作,反之,每一个删除都要等待插入操作,每一个新任务都交给线程执行,如果没有空闲线程,则尝试创建新的线程,如果线程达到最大时,则执行拒绝策略 2,有界线程ArrayBlockingQueue 判断节点: corePoolSize-->队列-->MaximumPoolSize-->.
2020-09-26 15:15:16
289
原创 线程的execute()和submit()区别
线程的execute()和submit()区别 execute接收runnable对象参数,方法不会返回执行结果,但是submit可以接受runnable和callable对象参数,通过结果封装进futrue,futrue.get()方法获取结果和异常信息, 但是以上两种该方法都无法捕获异常信息,解决方式就是使用ThreadFactory,实现它的UncaughtExceptionHandler。 ThreadFactory factory = r->{ Thread thread = Exe..
2020-09-26 15:11:28
381
原创 线程池的构造方法和线程池池工作队列
线程池的构造方法 ThreadPoolExecutor( int corePoolSize;-->核心线程数 int maximumPoolSize;-->最大线程数 long KeepAliveTime;-->空闲线程休眠时间 TimeUint uint;-->时间单元 BlockingQueue<Runnable> workQueue;-->工作队列 ThreadFactory threadFactory; -->线程工厂 RejectedExecutio
2020-09-26 12:06:58
240
原创 synchronized和reentrantlock区别 5点:
synchronized和reentrantlock区别 5点: (retryLock(),interrupt(),list,newCondition(),boolean) 1.reentrantlock 具有try lock()可以在其他线程未持有锁的时候,获取某个对象锁,减少同一时刻阻塞线程的数量 2.reentrantlock 可以对锁的支持性控制,通过 Boolean参数,指定是公平获取锁还是等待时间最长的获取锁 3.reentrantlock 具有interrupt,正在等待的reentrantl
2020-09-26 10:44:32
258
原创 Redis分布式锁的正确实现方式 https://mp.youkuaiyun.com/console/editor/html/107082452
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持
2020-07-02 13:31:11
235
原创 Linux日志中如何查找关键字及其前后的信息
Linux日志中如何查找关键字及其前后的信息 在日常工作中,我们经常需要查看日志,比如可以通过tail命令实时查看日志,也可以通过cat等命令查看日志信息。 但现在我们要讨论的是,如何从日志中通过关键字过滤出我们想要的内容,方法有多种,今天我们主要以cat命令来进行学习。 假设存在日志文件hrun.log,查询的关键字为"新增用户": 根据关键字查看日志cat hrun.log...
2019-10-30 13:42:17
498
原创 java juc2
1,线程交替测试 试题:编写一段程序,开启三个线程,线程ID分别为A,B,C;按一定顺序打印线程ID,如ABCABC import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /*
2017-09-19 13:31:54
522
翻译 java juc1
一、volitale关键字 1. volitale可以保证线程共享数据的内存可见性,也就是说,数据被修改之后,其他线程读取该数据的时候,会直接从主内存里面读取,所以读取的是最新数据; 2.volitale的性能比加锁的性能高,相对于synchronized 是一种较为轻量级的同步策略; 3.缺陷 a:volitale不能保证数据的"原子性"; b:volitale 不能保证线程''互
2017-09-16 09:58:58
262
转载 Map集合的四种遍历方式
Map集合的四种遍历方式 很久以前写的代码,和上一个做比较吧!便于以后查看 1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 5 public class TestMap { 6 public static void main(Str
2017-08-22 11:01:31
254
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅