自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

icepigeon314

学而思,思而学,记录程序员的思考。

  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 为什么ArrayBlockingQueue不使用LinkedBlockingQueue类似的双锁实现?

为什么ArrayBlockingQueue不使用LinkedBlockingQueue类似的双锁实现?在讨论这个问题之前,我们先来回顾下BlockingQueue的这两个实现类。我比较认同“程序等于数据结构加算法”的这一说法,对于面向对象设计的Java语言而言,类的字段对应数据结构,方法对应算法,所以从关键属性和方法就可以看出一个Java类的设计思路。先放上类图,只列出关键属性和方法。1....

2019-06-30 21:36:11 5067 8

原创 《重构-改善既有代码的设计》读后小结

《重构-改善既有代码的设计》读后小结,何为重构?为何重构?常用的重构手法有哪些?

2021-12-05 00:46:31 322

原创 TreeMap红黑树源码分析

TreeMap底层以黑红树数据结构存储数据,实现了Map.Entry接口,key/value记录实际数据,left/right/parent记录左右子节点和父节点,color标识节点颜色,只有红黑两种颜色,所以使用boolean类型。 static final class Entry<K,V> implements Map.Entry<K,V> { ...

2020-04-15 10:57:20 182

原创 mysql幻读及锁的实验

1.1什么是幻读,参考mysql官方文档:https://dev.mysql.com/doc/refman/8.0/en/innodb-next-key-locking.html上面的定义说的是在一个事务中,两次查询返回的结果不一致,重点是第二次查询是返回了更多的记录(其他事务插入的记录),这种现象被称为幻读。然后举的例子实际是一种加锁的case(select * from ... f...

2020-04-03 10:16:15 230

原创 Java线程池核心参数及实践

Java线程池的核心参数,估计很多人都能信手沾来,但如果再细问几个小问题,大部分人估计就答不上来了。1. 阻塞队列满了之后,如果线程数上限>核心线程数,新任务提交会导致创建新线程,新线程是优先执行刚到达的新任务还是阻塞队里的第一个任务?2.超过核心线程数创建的线程,再完成分配的任务之后是立即销毁还是优先检测并执行阻塞队列的未执行任务?3.为什么超过核心线程数之后,优先安排进入阻塞...

2020-03-30 20:34:47 274

原创 mybatis源码阅读笔记

1.Configuration是配置解析的核心对象,类图如下:RawSqlSource/DynamicSqlSource最终都会使用到StaticSqlSource封装sql语句,前者在解析xml时就已经实例化StaticSqlSource,后者在执行sql时实例化,即动态SQL。2.sq语句解析#{}与${}的区别1.${}传参为动态sql,对应DynamicSql...

2019-11-02 23:39:15 144

原创 BigDecimal为什么能做到高精度计算

很多人都知道在Java高精度计算时需要使用BigDecimal,实际上,很多对数值精度敏感的领域,比如结算、财务,也确实都是使用BigDecimal这种高精度计算工具来实现的,在二进制计算机的世界了,在有限的存储介质上无法准确保存0.1,就像十进制无法准确保存1/3类似,如果研究的更理论一些,可以看一下IEEE754二进制浮点数算术标准(https://baike.sogou.com/v51404...

2019-08-31 22:12:18 4500

原创 AbstractQueuedSynchronizer怎么用的?

AbstractQueuedSynchronizer是一个很复杂的抽象类,主要用于实现线程同步的各类解决方案,一共两千多行代码,本文不分析源码细节,试图从宏观层面分析AbstractQueuedSynchronizer的设计思路以及一些实际的使用场景。1、在线程的6种状态中,有三种使线程暂停的状态:BLOCKED/WAITING/TIME_WAITING,AQS将处于这三种状态的线程封装到No...

2019-07-07 23:27:17 284

原创 Thread的6种状态

Thread类中有一个State的枚举类型,定义了6种状态,源码如下:各个状态之间是可以相互转换的,状态图如下:为了加深Thread状态的理解,下面写了个测试程序,代码和结果如下:public class ThreadTest { public static void main(String[] args) { final Object obj...

2019-06-22 00:04:09 2110 1

原创 记一次Thread.join的思考(如何打断join阻塞状态?)

最近在温习Java Thread的各种状态变化,想到Thread.join方法的用法:当前线程阻塞到被join线程结束后才继续执行。于是我翻了以下Thread.join方法的源码,如下图:在发现join方法内部其实使用wait方法来实现的,我立即想到了对应的notify/notifyAll方法,当时就想着既然是用wait进行线程休眠,我是不是可以用notify/notifyAll来进行唤醒...

2019-06-20 23:56:42 2119

原创 Lock/Condition/Future示例,基于异步通信的同步机制

Java通过Lock类提供了高级的锁特性,它在获取锁的时候可以做更灵活的控制,比如设置获取锁的最长等待时间。Lock可以与多个Condition对象配合,Lock替代synchronized进行共享对象的锁控制,而Condition替代了Object监控方法的使用,Object中的wait/notify/notifyAll方法,可对应Condition中的await/signal/sinallAl...

2018-09-09 21:38:53 444

原创 coding - 快速排序

最近复习了《数据结构》,对于排序算法比较感兴趣,下面使用Java实现了一种快速排序算法。另外,在coding时发现Arrays类的sort方法使用了一种dual-pivot快速排序算法,比较好奇,于是找了些文章了解,算法世界果然奇妙,对于想了解该算法思想的同学,推荐仔细看一下这篇博文:https://blog.csdn.net/Holmofy/article/details/71168530...

2018-09-03 21:39:16 175

原创 Semaphore示例

java.util.concurrent.Semaphore提供了控制并发的工具类,关键方法是acquire()和release(),它提供一种基于许可的同步机制,初始化一定的许可数量,同步参与者先获取许可,再执行操作,然后释放许可。假如将许可数设置为1,就是一种简单的互斥锁的实现,即同一时间只有一个线程获取到许可。见下面的代码示例:public class TestSemaphore {...

2018-08-29 22:36:31 259

原创 Exchanger示例

java.util.concurrent.Exchanger提供了一个在阻塞点用于线程成对交换数据的同步机制。举个简单的例子,两个人一起干浇水的活,用两个水盆,A用盆1盛水,B用盆2浇水。1、A盛满水,等待B将盆2的水用完后和B交换水盆,然后A继续盛水,B继续浇水。2、B将盆2的水用光,则等待A盛满水后交换水盆,然后A继续盛水,B继续浇水。3、在发生交换前两者各自干自己的活,互不干扰,...

2018-08-29 21:37:20 264

原创 CountDownLatch示例

java.util.concurrent.CountDownLatch提供了一种同步辅助,可用于控制N个线程一起出发,或者阻塞到N个线程到达。关键方法是await()和countDown(),内部有一个计数器,countDown()将计数器减1,await()方法阻塞到计数器为0为止(其他线程调用countDown()可能将其唤醒),如果await()被调用时计数器已经为0,则该方法直接返回,不会...

2018-08-27 21:40:12 206

原创 CyclicBarrier示例

java.util.concurrent.CyclicBarrier提供了一种多阶段协同器的工具,每个阶段都等待固定数目的线程(parties)到达阻塞点(cyclicBarrier.await()),然后执行cyclicBarrier.barrierCommand.run(),并唤醒所有参与者的阻塞状态,进入下一个阶段。为了更好的理解该工具类的使用场景,下面的代码改造自JDK API的示例,目的...

2018-08-27 21:18:36 170

原创 简单学:Java.lang.ThreadLocal

最近与人交流Spring是否线程安全的问题,了解到Spring使用了ThreadLocal,出于好奇,简单地学习了一下ThreadLocal类,大道至简,我就说说我认为比较关键的一些地方:1、ThreadLocal封装了一些与当前线程(调用方法时的运行线程)相关的方法,如以下方法分别用于获取对象、设置初始值、设置对象,每个方法都使用了Thread.currentThread()来获取当前运行线...

2018-08-21 22:31:28 324

差分进化算法Matlab代码

差分进化算法的Matlab代码,可运行,动态演示优化过程,注释清楚

2010-12-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除