- 博客(16)
- 资源 (2)
- 收藏
- 关注
原创 谈一下threadLocal的理解
ThreadLocal是Java里一种特殊的变量。每个线程都有一个ThreadLocal就是每个线程都拥有了自己独立的一个变量,竞争条件被彻底消除了。它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它,如果为每个线程提供一个自己独有的变量拷贝
2017-08-27 21:34:57 441 4
原创 深入研究Spring-IoC:源码分析依赖注入
1.前言对于容器创建的过程已经阐述过一遍了,下面是依赖注入的问题。Spring提供的依赖注入的方法主要由两种:一种是通过getBean的方法;另一种是通过注解@Autowaire。需要指出的是依赖注入的过程是用户第一次向ioc容器索要Bean的时候开始生产的,也可以通过设置BeanDefinition的lazy-init属性来体现实例化。2.分析执行代码: HelloWorldService hel
2017-08-24 11:04:27 1137 6
原创 深入研究Spring-IoC:源码分析容器创建
1.前言从之前的分析中可以知道IOC容器的创建大致分为3步:Resource定位、BeanDefinition载入解析、向容器注册BeanDefinition。Tiny-spring手动实现了Spring框架,通过对这个源码的解读可以更好更有效的理解Spring。2.容器创建的硬编码ApplicationContext applicationContext = new ClassPathXmlApp
2017-08-24 10:32:27 439 5
原创 深入研究Spring-IoC :容器创建的几种方式
1.前言 本文为对tiny-spring的学习解读,代码参考自tiny-spring。一个手写的Spring简易版框架。 前面已经提到了Spring IOC容器的创建大致分为3个步骤。但是这个三个步骤是有一个演进的过程的,Spring容器创建方式前后有6种,从最基本的实例化创建创建到后来的自动化,这些过程的学习对我们学习理解IOC有很大的帮助。 2.容器创建需要的代码HelloWorldServic
2017-08-24 09:22:15 980 5
原创 深入研究Spring-IoC:两种设计和实现
一.Sprng IOC 解除了对象实例化造成的耦合现象;将对象的创建和对生命周期的管理交给了容器来管理,可以通过注入的方式将IOC容器中的对象供给开发者使用,极大方便了开发。 二.IOC容器系列的两种设计和实现–BeanFactory和ApplicationContext Spring IOC容器的设计中,IOC容器是一个统一称呼,具体担当容器的角色的Bean可以主要分为两种:BeanFactor
2017-08-23 20:16:16 766 5
原创 ITOO---选课里的Spring-RabbitMq
前言项目里需要用到RabbitMQ来做数据持久化的工作,需要将RabbitMQ集成到Spring中。生产端需要将同步消息发送到MQ,消费者接受后持久化到数据库;生产端/** * 退课 * @param coursetype * @param redisId * @param courseId * @param teachClassId *
2017-08-15 09:19:54 536 8
原创 并发编程(五):Executor框架
简介Executor是JDK提供的一套线程框架,用于有效的控制线程。Executor框架主要包含三个部分:任务:包括Runnable和Callable,其中Runnable表示一个可以异步执行的任务,而Callable表示一个会产生结果的任务任务的执行:包括Executor框架的核心接口Executor以及其子接口ExecutorService。在Executor框架中有两个关键类ThreadPoo
2017-08-15 09:04:12 338 6
原创 并发编程(四):并发工具类
前言并发工具类大致分为四种:阻塞队列、信号量(Semaphore)、栅栏(Barrier)以及闭锁(Latch)。用于Java在并发编程中各种情况下使用;闭锁– CountDownLatch闭锁作用相当于一扇门:在闭锁到达某一状态之前,这扇门一直是关闭的,所有的线程都会在这扇门前等待(阻塞)。只有门打开后,所有的线程才会同时继续运行。CountDownLatch 是一种灵活的闭锁实现,闭锁状态包含一
2017-08-15 08:28:38 1719 5
原创 并发编程(三):同步容器和并发容器
前言Java 中有些集合和非线程安全,而有些集合是线程安全,后者又被称为是Java中的同步容器,因为它能满足操作的原子性,保持数据同步。有些容器时Java自带的,而有些是通过Collections提供的方法包装的。同步容器在Java中,同步容器主要包括2类: 1)Vector、Stack、HashTableVector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但
2017-08-15 08:20:30 838 5
原创 并发编程(一):多线程基础知识
两种创建线程方法继承类: 1. 继承Thread 类;实现接口: 2. 实现Rnnable接口; 3. 实现Callable接口(rnnable的增强版,可以有返回值和抛异常)对比:Rnnable、Callable接口: 编程复杂,但是多个线程可以共享同一个target对象;适合多个相同线程来处理同一份资源的情况,可以将cpu、代码、数据分开。Thrad类: 编程简单,但是不能再继承
2017-08-15 08:09:36 490 4
原创 并发编程(二):非线程安全集合类
前言Java集合时所讲的ArrayList 、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都线程不安全的,当多个并发线程向这些集合中存取元素时,就可能会破坏这些集合的完整性。那么究竟是在什么情况下才会出现问题呢? 线程安全就是说多线程访问同一代码(对象、变量等),不会产生不确定的结果; 线程不安全的集合类ArrayList:package 线程不安全;imp
2017-08-14 21:48:04 843 5
转载 JDK自带工具类
下面,我们就按照工具文件名称的英文顺序来逐一介绍JDK内置的工具。 工具名称 描述 appletviewer.exe 用于运行并浏览applet小程序。 apt.exe 注解处理工具(Annotation Processing Tool),主要用于注解处理。 extcheck.exe 扩展检测工具,主要用于检测指定jar文件与当前已安装的
2017-08-13 19:39:35 3524 3
原创 ITOO---“秒杀”选课之Redis序列化
1.我的选课在进行选课活动中了为了尽量减少客户端和数据库的连接次数,在实现的思路是这样设计的:客户端的请求优先访问Redis缓存空间,如果Redis中没有则从数据库中加载,并添加到Redis中。这样多个客户端会优先从Redis中加载所需的资源,减少了数据库的压力。 ps:选课中的课程比较多,数据库量较大。 在Redis的存储遇到了个问题,因为Redis的存储方式是(Key,Value)形式的,在设计
2017-08-06 21:16:25 1134 13
原创 ITOO---选课里的“秒杀”业务实现(一)
1.我的选课 在选课中有个中心环节需要格外的注意,那就对每一门课程数量增减。假如一门《走进英国》的选修课,因资源有限只有100个名额,在redis中以Key/Value形式存储–(CousreID,Capacity);客户端每次选课退课都只是对Capacity进行增减,它的业务实现逻辑是这样的:1.判断redis中是否存在该门课程的缓存;获得数据或者重新加载; 2.判断redis中该门课程的容量是
2017-08-06 20:38:48 937 12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人