- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 线程池7大参数详细讲解
源码中7大参数位置:七大参数:拒绝请求执行的runnable的策略。理解图:1. corePoolSize线程池中的常驻核心线程数3. keepAliveTime多余的线程存活核心线程满了,阻塞队列也满了,才会开启max最大线程数,如果还是满了,就会启动拒绝策略。如果流量降下来,就按照设置的时间最大数,慢慢的回到了核心线程数。原理:注意:阿里巴巴规范拒绝策略:public class ThreadPoolDemo { public static void m
2020-12-31 16:53:06 1180
原创 Executors三个线程池的使用及场景
好处:底层都是ThreadPoolExecutorExecutors.newFixedThreadPoolpublic class ThreadPoolDemo { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(5);//一池5个处理线程 try { for (int i
2020-12-30 17:50:07 430
原创 线程的第三种创建方式-Callable的使用
线程的第三种创建方式Callable的使用public class MyThread implements Callable { @Override public Integer call() throws Exception { System.out.println(Thread.currentThread().getName()+ ":11111111"); return 1024; }}public class CallableDemo
2020-12-30 17:21:57 260
原创 BlockingQueue实现生产者消费者
前提:之前生产者,消费者需要线程自己控制等待,唤醒。现在使用blockingQueue不需要。代码:public class MySource { private volatile boolean isTrue = true; private AtomicInteger atomicInteger = new AtomicInteger(); private BlockingQueue blockingQueue = null; public MySource(Bloc
2020-12-30 12:50:19 424
原创 Synchronized和Lock的区别?
一 原始构成二 使用方法三 等待是否可中断四 加锁是否公平五 锁绑定多个条件condition代码:精确通知:public class ShareResource { private int number = 1; //a:1 b:2 c:3 private Lock lock = new ReentrantLock(); private Condition condition1 = lock.newCondition(); private C
2020-12-30 10:34:18 232 1
原创 多线程生产者消费者模式
前提知识synchronized 使用wait等待线程,notify唤醒线程lock使用Condition condition = lock.newCondition();condition中的await等待线程,signal唤醒线程。上代码:public class ShareDate { private int number = 0; private Lock lock = new ReentrantLock(); private Condition conditi
2020-12-30 09:39:27 74
原创 列队,阻塞列队,BlockingQueue的使用
列队/阻塞列队空的话消费者阻塞,因为没有东西可消费。满的话生产者阻塞,因为列队放满了。BlockingQueue有7种列队实现BlockingQueue接口抛出异常element()作用检查队列是否为空,队首元素是谁。特殊值...
2020-12-30 08:55:54 109
原创 Semaphore使用
Semaphore就是信号量代码:总结;跟CountDownLatch和CyclicBarrier区别就是,Semaphore可以达到复用,有减,有加,一直使用。而CountDownLatch和CyclicBarrier要一直累加和减,不好达到复用。
2020-12-29 10:55:18 543
原创 CyclicBarrier使用
理论:与CountDownLatch相反,CountDownLatch是做减法的,减到0才开始。而CyclicBarrier是做加法,加到一定数值,才开始执行。代码:public class CycllicBarrierDemo{ public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(7, new Thread(new Runnable() {
2020-12-29 10:45:38 140
原创 CountDownLatch
CountDownLatch使用例子:需要main线程最后一个触发,最后结果是main线程并非最后一个运行,引入countdownlatch加入countdownlatch结果,实现了需求。枚举使用使用枚举线程i被替换成相应的values。...
2020-12-29 10:27:28 67
原创 集合类不安全的问题
ArrayList是不安全的第一次运行。数量正确,但是为空第二次运行。数量不对,又为空。线程30个,出现异常:解决方案一 new Vector()可以解决。二 collections 工具类collections 还提供其他很多安全的。三 new CopyOnWriteArrayList原理:源码,参考上面的图:hashSet也是线程不安全的例子:解决方法:一 Collections工具类CopyOnWriteSet()底层是hashMap为什
2020-12-28 16:41:08 97
原创 Volatile详解
JMM三大特性:可见性,原子性,有序性.可见性volatile轻量级。保证可见性代码验证:结果:没有输出mission is over。加上volatile结果:有一个线程修改了值,其他的线程会收到通知,立马输出。总结:原子性vlolatile不保证原子性代码验证:如果正常能保证原子性,结果应该为20000,运行多次都没达到20000。1.因为每个线程初始都是把开始值为0放入自己的工作内存,线程1把值增加为2写入主内存,线程2把值增加成1也写回主内存,就
2020-12-28 11:18:34 152
原创 Redis算法-手写Lru算法
题目来源:力扣146题思想问:查找快,删除快,且还需要先后排序,哪一种数据结构满足要求?hash+链表,哈希查找快,链表插入删除快。移动前,如图:移动后,如图:第一种算法java自带实现数据结构,LinkedHashMap,实现该类就可以使用:注意:父类的构造方法为false是一种情况import java.util.LinkedHashMap;import java.util.Map;public class LruCache<K,V> extends Li
2020-12-24 11:18:57 235
原创 Redis缓存过期淘汰策略
Redis默认内存?设置内存推荐最大物理内存*0.75修改文件方式如果在运行,动态的修改,就命令方式info memory也可以查看redis内存使用超出了设置的最大值?也会出现错误 缓存过期淘汰策略从配置文件中看有8种默认三种不同删除策略定时删除总结:惰性删除总结定期删除内存淘汰策略记忆图,第二种最长使用最近最少使用,频率最少使用配置文件设置:命令行配置...
2020-12-23 21:57:21 110
原创 Redis分布式锁-Redisson使用
Redisson使用redisConfig配置使用测试jemeter进行压测成功!完善finally 那样写有可能会报错! 推荐写法
2020-12-23 20:20:28 84
原创 Redis分布式锁-基础篇
前提知识:创建两台单机版,端口号不同的redis服务。主要代码如下:问题一:多线程,没加锁,有两种锁,synchronized和lock,lock会更加灵活,可以tryLock,如下:为了方便,使用synchronized,单机版下使用没用问题。但是分布式部署下,单机锁还是会出现超卖问题,因为不是在同一个jvm层面的锁,所有需要分布式锁。问题二 使用nginx进行负载均衡,轮询发送部署两台服务器,用Jemeter进行压测,就出现了超卖现象。解决:解锁:解决:单机版sy
2020-12-23 20:08:06 119
原创 Redis使用和应用场景
redis两个注意点String使用和场景Hash使用和应用场景List使用和应用场景Set使用和应用场景无序,无重复微博好友关注社交关系共同关注我关注的人也关注他QQ内推可能认识的人Zset使用和应用场景统计,排序销售数量排序热搜...
2020-12-23 15:26:26 74
原创 Spring循环依赖和三级缓存
循环依赖定义JavaSE代码演示构造器注入结论:构造器方法注入无法解决,会一直报错setter注入 注意:没有构造方法测试:Setter可以解决
2020-12-23 11:25:54 147
原创 Spring4和Spring5的AOP顺序
Spring4和Spring5的AOP顺序Spring4的AOP顺序正常情况异常情况结论Spring5的AOP顺序正常情况异常情况结论Spring4和Spring5的对比Spring4和Spring5测速的小不同Spring4的测试如下:Spring5的测试如下:Spring4的AOP顺序正常情况异常情况结论Spring5的AOP顺序正常情况异常情况结论@before-------->@afterReturning------------->@after@befor
2020-12-22 19:25:33 976
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人