- 博客(23)
- 资源 (7)
- 收藏
- 关注
转载 java 多线程实现源码解析
转发自:https://blog.youkuaiyun.com/hzw19920329/article/details/52372348最近在看java线程池实现方面的源码,在此做个小结,因为网上关于线程池源码分析的博客挺多的,我也不打算重复造轮子啦,仅仅用纯语言描述的方式做做总结啦! 个人认为要想理解清楚java线程池实现原理,明白下面几个问题就可以了: (1):...
2018-08-27 16:33:18
1011
转载 JUC源码解析----- 线程池之 FutureTask类
1、FutureTask 概念FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提供了 start () 、cancel()操作,可以查询计算是否已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成的时候,一旦计算已经完成,那么计算就不能再次启动或是取消。一个FutureTask 可以用来包装一个 Cal...
2018-08-20 14:25:25
314
原创 JUC源码解析(1)---- ThreadPoolExecutor 实现原理、submit()实现
通过ExecutorService.submit()方法提交的任务,可以获取任务执行完的返回值。在实际业务场景中,Future和Callable基本是成对出现的,Callable负责产生结果,Future负责获取结果。1、Callable接口类似于Runnable,只是Runnable没有返回值。2、Callable任务除了返回正常结果之外,如果发生异常,该异常也会被返回,即Future可...
2018-08-20 14:02:13
496
原创 JUC源码解析(5)----线程池之 newScheduledThreadPool()
初始化的线程池可以在指定的时间内周期性的执行所提交的任务,在实际的业务场景中可以使用该线程池定期的同步数据。1、创建延时任务线程池的Excutors源码,ScheduledThreadPoolExecutor实现了ScheduleExecutorService接口。2、ScheduledThreadPoolExecutor源码,ScheduledThreadPoolExecutor继承...
2018-08-20 13:38:34
2263
原创 JUC源码解析(4)----线程池之 newSingleThreadExecutor()
可以通过调用Executors类的static newSingleThreadExecutor()方法获得单个线程池。语法ExecutorService executor = Executors.newSingleThreadExecutor();JavanewSingleThreadExecutor()方法创建一次执行单个任务的执行程序。创建一个单线程的线程池。这个线...
2018-08-20 11:28:04
907
原创 JUC源码解析(3)----线程池之 newCachedThreadPool()
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。通过调用Executors类的静态newCachedThreadPool()方法可以获得缓存的线程池。语法ExecutorService executor = Executors.newCachedThreadPool();Java其中,n...
2018-08-20 11:16:37
671
原创 JUC源码解析(2)----线程池之 newFixedThreadPool()
JDK 为我们内置了四种常见线程池的实现,均可以使用 Executors 工厂类创建。1.newFixedThreadPool上面这两个方法是创建固定数量的线程池的两种方法,两者的区别是:第二种创建方法多了一个线程工厂的方法。我们继续看ThreadPoolExecutor这个类中的构造函数:FixedThreadPool 被称为可重用固定线程数的线程池。 ...
2018-08-20 10:54:57
338
原创 JUC源码解析(1)---- ThreadPoolExecutor 实现原理、execute()实现
线程池类结构图:ThreadPoolExecutorJava.util.concurrent.ThreadPoolExecutor类是ExecutorSerivce接口的具体实现。ThreadPoolExecutor使用线程池中的一个线程来执行给定的任务(Runnable或者Runnable)。ThreadPoolExecutor对象,具体参数描述如下:corePoolSize...
2018-08-19 22:42:10
557
原创 MyBatis源码解读(3)——执行器
mybatis在执行期间,主要有四大核心接口对象:执行器Executor,执行器负责整个SQL执行过程的总体控制。 参数处理器ParameterHandler,参数处理器负责PreparedStatement入参的具体设置。 语句处理器StatementHandler,语句处理器负责和JDBC层具体交互,包括prepare语句,执行语句,以及调用ParameterHandler.param...
2018-08-19 15:15:18
6105
原创 MyBatis源码解读(2)——MapperProxy
上篇文章,解析了SqlSession 的创建过程,本章延续上章的内容,接着SqlSession 来讲解MapperProxy。1、通过sqlSession 调用getMapper() 方法,来解析过程。接着上一篇讲到通过 DefaultSqlSessionFactory 可以得到一个 SqlSession 的实例 DefaultSqlSession 。通过 DefaultSql...
2018-08-17 19:21:35
367
原创 MyBatis源码解读(1)----SqlSession 的创建过程
一、SqlSessionFactoryBuilder1、通过字符流的方式创建 SqlSessionFactory 。 2、通过字节流(InputStream)的方式构件 SqlSessionFacotry。3、通过Configuration对象构建SqlSessionFactory。总结:不管是字符流方式创建还是字节流的方式创建, 最终都会调用C...
2018-08-17 16:13:30
1763
1
转载 MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用
Myabtis官网:http://www.mybatis.org/ github地址:https://github.com/mybatis/mybatis-3MyBatis的持久化解决方案是将用户从原始的JDBC访问中解放出来,用户只需要定义需要操作的SQL语句,无须关注底层的JDBC操作,就可以以面向对象的方式来进行持久化层操作.底层数据库连接的获取,数据访问的实现,事务控制等都无须用...
2018-08-17 10:21:06
312
原创 Mybatis配置和接口映射原理
Mybatis可以把Mapper.xml文件直接映射到对应的接口文件,调用接口方法会自动去Mapper.xml文件中找到对应的标签,这个功能就是利用java的动态代理在binding包中实现的。一、注册Mapper在初始化时会把获取到的Mapper接口注册到MapperRegistry,注册的时候创建一个Mapper代理工厂,这个工厂通过JDK的代理创建一个执行对象,创建代理需要的Invo...
2018-08-16 18:56:36
1568
原创 java 类的加载执行顺序
static代码块,执行顺序:从上往下,按顺序执行。 类调用:1、类的静态代码块比无参构造方法先执行。2、子类继承父类: 父类中的静态代码块比子类中的静态代码块先执行,先父后子。 父类中的无参构造方法比子类中的无参构造方法先执行,先父后子。 3、父类创建子类的对象,然后再次创建一个子类的对象赋值给第一次的子类对象,先执行父类...
2018-08-14 16:09:12
360
原创 进程间共享内存的8种方式
进程间的八种通信方式----共享内存是最快的 IPC 方式1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2.高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。3.有名管道 (named pipe) : ...
2018-08-10 10:24:06
12543
转载 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
今天给大家整理一篇关于Redis经常被问到的问题:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等概念的入门及简单解决方案。一、缓存雪崩缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一...
2018-08-05 17:29:58
132
转载 为什么说Redis是单线程的以及Redis为什么这么快!
一、前言近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。如果你在以前面试的时候还没有遇到过面试官问你《为什么说R...
2018-08-05 17:25:18
210
原创 Spring使用ThreadLocal解决线程安全问题
我们知道在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域。就是因为Spring对一些Bean(如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等)中非线程安全状态采用ThreadLocal进行处理,让它们也...
2018-08-05 11:27:37
1457
翻译 AQS工作原理分析
AQS工作原理分析一、大致介绍1、前面章节讲解了一下CAS,简单讲就是cmpxchg+lock的原子操作;2、而在谈到并发操作里面,我们不得不谈到AQS,JDK的源码里面好多并发的类都是通过Sync的内部类继承AQS而实现出五花八门的功能;3、本章节就和大家分享分析一下AQS的工作原理;二、简单认识AQS 2.1 何为AQS?1、AQS是一个抽象类,类名为Abstra...
2018-07-31 16:36:14
9062
转载 面试必备:HashMap源码解析(JDK8)
参考文章:https://blog.youkuaiyun.com/zxt0601/article/details/77413921原理:参考文章http://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/我们现在可以回答开始的几个问题,加深对HashM...
2018-07-10 14:11:27
313
转载 Java面试通关要点汇总集和答案
基本功问题:说说反射的用途及实现? 1、什么是Java类中的反射? Reflection 是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类和对象的内部属性。 通过反射,我们可以在运行时获得程序或程序集中每一个类型成员和成员变量的信息。 程序中一般的对象类型都是在编译期就确定下来的,而Java 反射机制可以动态...
2018-06-22 15:44:27
1058
原创 多线程面试题总结
线程线程1、创建线程的方式及实现答:A、继承Thread类创建线程。B、实现Runnable接口创建线程 C、使用Callable和Future创建线程------------------------继承Thread类创建线程---------------------通过继承Thread类来创建并启动多线程的一般步骤如下:1】d定义Thread类的子类,并重写该类的run()方法,该...
2018-06-21 10:17:11
643
转载 高可用架构篇 MyCat集群部署(HAProxy + MyCat)
高可用架构篇 MyCat集群部署(HAProxy + MyCat)参考实战视频:http://www.roncoo.com/course/view/85d6008fe77c4199b0cdd2885eaeee53一、本节课程的依赖课程《高可用架构篇--第13节--MySQL源码编译安装(CentOS-6.6+MySQL-5.6)》《高可用架构篇--第14节--MySQL主从
2017-02-16 09:00:38
3336
Spring Boot实战 丁雪丰译者
2017-09-15
Spring Boot揭秘 (高清版)
2017-09-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人