05 2019 档案
摘要:进程间通信方式有哪些 为什么使用Executor框架? 使用Executor线程池框架的优点 1、能复用已存在并空闲的线程从而减少线程对象的创建从而减少了消亡线程的开销。 2、可有效控制最大并发线程数,提高系统资源使用率,同时避免过多资源竞争。 3、框架中已经有定时、定期、单线程、并发数控制等功能。
阅读全文
摘要:转自: https://www.jianshu.com/p/d8eeb31bee5c 前言 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),内部实现
阅读全文
摘要:Condition主要是为了在J.U.C框架中提供和Java传统的监视器风格的wait,notify和notifyAll方法类似的功能。 AQS等待队列与Condition队列是两个相互独立的队列 await()就是在当前线程持有锁的基础上释放锁资源,并新建Condition节点加入到Conditi
阅读全文
摘要:重入锁的特性, 避免死锁, 如果有锁的话, 不用重新加锁, 直接增加锁的次数.. Synchronize, ReentrantLock都是重入锁. 读写锁, ReentrantReadWriteLock里面有两把锁, 读锁和写锁,适用于读多写少的情景. 读->读会共享 读->写 互斥 写->写 互斥
阅读全文
摘要:为什么会有内存屏障 每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。 用volatile关键字修饰变量可以解决上述问题,那么volat
阅读全文
摘要:MESI协议中的状态 CPU中每个缓存行(caceh line)使用4种状态进行标记(使用额外的两位(bit)表示): M: 被修改(Modified) 该缓存行只被缓存在该CPU的缓存中,并且是被修改过的(dirty),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它CPU
阅读全文
摘要:synchronized 的基本认识 在多线程并发编程中 synchronized 一直是元老级角色,很 多人都会称呼它为重量级锁。但是,随着 Java SE 1.6 对 synchronized 进行了各种优化之后,有些情况下它就并不 那么重,Java SE 1.6 中为了减少获得锁和释放锁带来的
阅读全文
摘要:ComponetScan 定义扫描规则 FilterType.ANNOTATION :按照注解的方式 FilterType.ASSIGNABLE_TYPE:按照给定的类型 FilterType.CUSTOM:使用自定义规则。 使用这个需要是TypeFilter的实现类 FilterType.CUST
阅读全文
摘要:Import可以像类似于@Component此功能的注解一样,在容器启动的时候将此类定义为一个bean,并将此bean交于容器管理,但此用法较少。 在Spring boot中实现自己一些比较复杂的Bean时, 并且注入到Spring容器中的一些方法 1. @ComponentScan注解 2. 使用
阅读全文
摘要:一级缓存默认开启, 有效范围是在当前sqlsession, 同一个SqlSession对象执行相同的sql并参数也要相同,缓存才有效。 在同一个会话里面,多次执行相同的SQL 语句,会直接从内存取到缓存的结果 一级缓存不足: 使用一级缓存的时候,因为缓存不能跨会话共享,不同的会话之间对于相同的数据可
阅读全文