- 博客(46)
- 资源 (20)
- 问答 (4)
- 收藏
- 关注
原创 从头认识Spring-目录
实战篇:第一章 Spring简介与Bean1.1 什么是依赖注入?为什么需要依赖注入?1.2 什么是AOP?为什么需要面向切面编程?1.3 Spring的容器与Bean1.4 通过构造器注入Bean1.5 Bean的作用域
2016-01-30 16:10:32 4998 4
原创 从头认识Spring-1.9 内部类注入Bean
这一章节我们来讨论一下内部类注入Bean。1.domain蛋糕类:(跟前一章节的一样)package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_9;public class Cake { private final int id = index++; private static int index = 0;
2016-01-31 22:58:27 3295
原创 从头认识Spring-1.8 怎样利用AOP记录日志?
由于之前有网友提出Aop的使用的问题,我们这一章节来讨论一下利用AOP记录日志。我们下面将以用户登录为例子1.domainUser类:package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_8;public class User { private String name = ""; private int i
2016-01-31 16:32:31 2111
原创 从头认识Spring-1.7 怎样通过属性注入Bean?(2)-怎样通过属性向对象注入另一个对象的引用?
这一章节我们继续上面的话题。2.怎样通过属性向对象注入另一个对象的引用?(1)domain我们除了蛋糕类,还需要引用前面的厨师类package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7;public class Cake { private final int id = index++; private static i
2016-01-31 16:04:45 3032
原创 从头认识Spring-1.7 怎样通过属性注入Bean?(1)-怎样通过属性向对象注入值?
这一章节我们来讨论一下怎样通过属性注入Bean?这一章节分为两部分,第一部分我们通过属性向对象注入值,第二部分我们通过属性向对象注入另一个对象的引用。1.怎样通过属性向对象注入值?(1)domainpackage com.raylee.my_new_spring.my_new_spring.ch01.topic_1_7;public class Cake { private fin
2016-01-31 15:47:26 2173
原创 从头认识Spring-1.6 Bean的创建与销毁操作
这一章节我们来介绍一下Bean的创建与销毁操作。在xml的配置里面,我们可以配置Bean的创建与销毁操作。(1)domainpackage com.raylee.my_new_spring.my_new_spring.ch01.topic_1_6;public class Chief { private final int id = index++; public int getId()
2016-01-30 23:46:01 1803 2
原创 从头认识Spring-1.5 Bean的作用域
这一章节我们来讨论一下Bean的作用域。1.Bean的作用域singleton:单例prototype:任意次创建request:每次请求创建一个,仅在web里面有效session:每个session创建一个,仅在web里面有效global-session:在全局session里面,每个bean一个实例上面的几个作用域我们一般使用singleton和prototype,而且以singleton为主
2016-01-30 16:09:07 1976 1
原创 从头认识Spring-1.4 怎样通过构造器注入Bean?
这一章节我们来介绍一下通过构造器注入Bean。1.怎样生命一个Bean?(1)创建类package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_2;public class Song { private String name; public Song(String name) { this.name = name; }
2016-01-30 00:27:35 3366 1
原创 从头认识Spring-1.3 Spring的容器与Bean
这一章节我们来讨论一下Spring的容器与Bean。1.Spring的容器(1)BeanFactory这个是由org.springframework.beans.factory.BeanFactory来实现的(2)ApplicationContext这个是由org.springframework.context.ApplicationContext来实现的我们在一般的编程当中,都是以Applica
2016-01-29 15:23:40 1884 1
原创 从头认识Spring-1.2 什么是AOP?为什么需要面向切面编程?
这一章节我们来介绍一下什么是AOP?为什么需要面向切面编程?1.什么是AOP?(百度百科版)AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。比如我们最常见的就是日志记录了,举个例子,我们现在提供一个查询学生信息的服务,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询
2016-01-29 14:14:43 8094 6
原创 从头认识Spring-1.1 什么是依赖注入?为什么需要依赖注入?
这一章节我们来讨论一下什么是依赖注入?为什么需要依赖注入?1.什么是依赖注入?笔者理解的是:对象的生成不再是通过显示的new,而且到spring容器里面取,对象的创建是使用注入这种形式2.为什么需要依赖注入?(1)解耦(2)易于测试我们以歌唱家唱歌这个为例子,在没有使用依赖注入情况下的代码:package com.raylee.my_new_spring.my_new_spring.ch01.to
2016-01-29 10:39:00 7771 5
原创 从头认识java-18.6 synchronized在其他对象上同步和ThreadLocal来消除共享对象的同步问题
这一章节我们来介绍在其他对象上同步与ThreadLocal。前一章节我们使用了1.synchronized在其他对象上同步class ThreadA implements Runnable { private Object object = new Object(); private synchronized void test() throws InterruptedException {
2016-01-26 11:42:48 1738 1
原创 从头认识java-18.5 临界区
这一章节我们来讨论一下临界区。一般来说,我们使用多线程都是直接在方法上面加上synchronized,但是其实这样有些时候对于性能来说,有所欠缺,因此今天来讨论一下临界区的问题。1.一般做法的例子class ThreadA implements Runnable { private synchronized void test() throws InterruptedException {
2016-01-26 10:53:37 3404 2
原创 从头认识java-18.4 java多线程原子性操作里面的坑
这一章节我们来讨论一下java多线程原子性里面的坑。1.看似原子性操作:package com.ray.ch18;public class Test { private int a = 0; private int b = 0; public void methodA() { b = a + 1; } public int methodB() { return a;
2016-01-25 22:34:17 1766
原创 从头认识java-18.3 什么时候使用同步?
这一章节我们再次来讨论竞争条件的第一个方面:不正确的访问资源。我们上次以银行转账的例子说明了一下竞争条件,我们下面再引入另一个例子,再次说明竞争条件的形成。1.例子:package com.ray.ch18;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public cl
2016-01-25 22:07:37 2001 2
原创 从头认识java-18.2 基本的线程机制(8)多线程的异常捕捉
这一章节我们来讨论一下多线程的异常捕捉。1.普通情况的异常package com.ray.ch17;public class Test { public static void main(String[] args) { try { new ThreadA().run(); } catch (Exception e) { System.out.println("捕捉到异
2016-01-20 21:59:54 1531
原创 从头认识java-18.2 基本的线程机制(7)join
这一章节我们来讨论一下join。1.什么是join?堵塞当前线程,让.join的线程先做完,然后再继续当前线程下面是api的解释:A.join,在API中的解释是,堵塞当前线程B,直到A执行完毕并死掉,再执行B。 2.例子:package com.ray.ch17;public class Test { public static void main(String[] args) thro
2016-01-20 11:49:03 1375
原创 从头认识java-18.2 基本的线程机制(6)-使用构造器或者内部类来实现多线程的编码变体
这一章节我们来讨论一下使用构造器或者内部类来实现多线程的编码变体。1.基础实现package com.ray.ch17;public class Test { public static void main(String[] args) { Thread thread1 = new ExtendsThread(); thread1.start(); Thread thread2
2016-01-19 16:47:02 1365
原创 从头认识java-18.2 基本的线程机制(5)-守护线程与非守护线程
这一章节我们来讨论一下守护线程与非守护线程。1.什么是守护线程?什么是非守护线程?非守护线程:Java虚拟机在它所有非守护线程已经离开后自动离开。守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。2.相同点大家都是线程,其实可以互相切换3.不同点:退出的时间点退出的先后顺序:非守护线程->守护线程->jvm4.注意点:(1)设置守护线
2016-01-18 16:01:50 1388
原创 从头认识java-18.2 基本的线程机制(4)-优先级
这一章节我们来讨论一下多线程的优先级问题。1.例子:package com.ray.ch17;public class Test { public static void main(String[] args) { MyThead myThead = new MyThead(); MyThead2 myThead2 = new MyThead2(); for (int i =
2016-01-17 23:12:06 1583
原创 从头认识java-18.2 基本的线程机制(3)-线程的返回与sleep
这一章节我们来讨论一下线程的返回与sleep。1.线程的返回package com.ray.ch17;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.Exe
2016-01-17 17:46:24 1753
原创 从头认识java-17.7 执行器(Executor)
这一章节我们来讨论一下Executor的第一个话题线程池。1.什么是线程池?(下面的解释来自http://baike.haosou.com/doc/2511076-2653416.html)线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空
2016-01-17 12:03:03 1612
原创 从头认识java-17.6 Callable、Future和FutureTask
这一章节我们来讨论一下Callable、Future和FutureTask的用法与关系。1.关系(1)Callable是Runnable的封装的异步运算任务(2)Future用来保存Callable异步运算的结果(3)FutureTask封装Future的实体类 2.Future我们在这里详细介绍一下Future,因为它比较复杂,首先看看他的源代码:public interface Future
2016-01-16 22:59:26 1813 1
原创 从头认识java-17.5 阻塞队列(以生产者消费者模式为例)
package com.ray.ch17;import java.util.concurrent.LinkedBlockingQueue;public class Test { public static void main(String[] args) { Basket basket = new Basket(); Thread thread1 = new Thread(ne
2016-01-16 07:49:11 1914 3
原创 从头认识java-17.4 详解同步(5)- 死锁
这一章节我们来简单讨论一下死锁,其实死锁是一个比较大的话题,但是我这里只是根据我前面的银行转账的例子来说明,在后面会有详细的专栏来说明并发编程的各个方面的问题。1.什么是死锁?是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。2.怎样会引起死锁?(1) 互斥条件:一个资源每次只能被一个进程使用;(2) 请求与保持条件:既拿
2016-01-15 11:31:55 1572 1
原创 从头认识java-17.4 详解同步(4)-同步阻塞、synchronized和volatile
这一章节我们来介绍同步阻塞、synchronized和volatile。1.同步阻塞之前我们提到过synchronized放在同步方法上:public synchronized void transfer(int fromAccount, int toAccount, double money) { if (accounts[fromAccount] < money) { r
2016-01-13 22:01:50 3104
原创 从头认识java-17.4 详解同步(3)-对象锁
这一章节我们接着上一章节的问题,给出一个解决方案:对象锁。1.什么是对象锁?对象锁是指Java为临界区synchronized(Object)语句指定的对象进行加锁,对象锁是独占排他锁。2.什么是临界区?临界区是指程序中的一个代码段,在这段代码中,单独并发的线程对同一个对象进行访问。在Java中,用关键字“synchronized”标识一个临界区。3.常用的对象锁:synchronized和Ree
2016-01-11 22:44:50 1754 3
原创 从头认识java-17.4 详解同步(2)-详解竞争条件
这一章节我们来详细讨论一下竞争条件。1.为什么会引起竞争条件?由于操作缺失原子性。2.什么是原子性?所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。3.分解上一章节转账的步骤:(1)读取某个账户的余额,对比提取的金额if (accounts[fromAccount] < money) { r
2016-01-11 17:33:40 1867 1
原创 从头认识java-17.4 详解同步(1)-由竞争条件引发的问题
这一章节我们来讨论一些同步的一些话题,由竞争条件引发的问题。1.什么是竞争条件?多个线程或者进程在读写一个共享数据时结果依赖于它们执行的相对时间,这种情形叫做竞争。竞争条件发生在当多个进程或者线程在读写数据时,其最终的的结果依赖于多个进程的指令执行顺序。举一个例子:我们平常编程经常遇到的修改某个字段,这个操作在库存那里尤为突出,当两个单子同时修改库存的时候,这时就形成了竞争条件,如果不做同步处理,
2016-01-11 14:39:55 2106 2
原创 从头认识java-17.3 线程状态
这一章节我们来讨论一下线程的状态。1.状态(1)新建状态(New):新创建了一个线程对象(2) 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。(3) 阻塞状态(Blocked):当任务想获取对象锁,但是该锁被其他任务持有,该任务的状态是阻塞状态;当持有锁对象释放锁,然后该任务持有锁,此时该
2016-01-11 11:02:09 1543 1
原创 从头认识java-17.2 线程中断(interrupt)
这一章节我们来讨论一下线程中断(interrupt)。1.什么是线程中断(interrupt)?就是在多线程运行的时候,我们给线程贴上一个中断的标记,但是不要求线程终止。 2.例子:中断的例子:package com.ray.ch17;public class Test2 { public static void main(String[] args) { PrintA prin
2016-01-10 16:21:16 1295
原创 从头认识java-17.1 多线程
这一章节我们来讨论一下多线程。1.什么是多线程?多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multi
2016-01-10 08:39:29 1464 1
原创 从头认识java-18.2 基本的线程机制(2)-Executors的使用
在前面的章节我们都是直接对Thread进行管理,我们这里解释一下另一个管理Thread的类Executors。1.例子:package com.ray.ch17;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.
2016-01-08 15:12:21 1526 1
原创 从头认识java-18.2 基本的线程机制(1)-再识多线程-2
接着上一个章节,我们这一章节介绍一下多线程的注意点。线程间执行的顺序和时间是不同的我们修改一下上一章节的代码:package com.ray.ch17;public class Test { public static void main(String[] args) { for (int i = 5; i < 8; i++) { DoneMission doneMission
2016-01-08 14:05:07 1383
原创 从头认识java-18.2 基本的线程机制(1)-再识多线程-1
这一章节我们来介绍一下Runnable。1.例子package com.ray.ch17;public class Test { public static void main(String[] args) { for (int i = 5; i < 8; i++) { DoneMission doneMission = new DoneMission(i); doneMi
2016-01-08 11:24:22 1290
原创 从头认识java-18.1 为什么需要并发?
这一章节我们来讨论一下为什么需要并发?答案如下:1.快先对比一下下面的两个例子:package com.ray.ch17;import java.util.ArrayList;public class Test { public static void main(String[] args) throws InterruptedException { long start
2016-01-07 21:27:23 1622 1
原创 从头认识java-16.6 ByteBuffer是怎样存储的?
这一章节我们来讨论一下ByteBuffer是怎样存储的?1.例子:package com.ray.ch16;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.IntBuffer;import java.nio.LongBuffer;publ
2016-01-07 11:02:06 1758
原创 从头认识java-16.5 nio的数据转换
这一章节我们来讨论一些nio的CharBuffer。上面一章节我们提到ByteBuffer,但是他是面向二进制数据,对于编程来说不是很方便,因此,java增加了转换数据的工具。1.例子package com.ray.ch16;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOExc
2016-01-06 22:48:32 1690
原创 从头认识java-16.4 nio的读与写(ByteBuffer的使用)
这一章节我们来讨论一下nio的读与写。1.nio的读package com.ray.ch16;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class Test { p
2016-01-06 09:25:20 1810
原创 从头认识java-16.3 IO的典型用法
解释:由于IO里面的InputStream,OutputStream这些api的用法比较简单,因此,暂时没有略过。这一章节主要介绍一下IO的典型用法。1.使用IO的时候推荐在外面包一层Bufferpackage com.ray.ch16;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.
2016-01-05 17:34:51 1674
Mastering Python Design Patterns 精通python设计模式
2015-09-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人