摘要: spring的MVC执行原理 1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑 3.AOP的很好支持,方便面向切面编程。 5.Spring DI机制降低了业务对象替换的复杂性。 7.Spring的高度可开放性,并不强制依赖于Spri 阅读全文
posted @ 2017-05-04 17:43 牛头人 阅读(547) 评论(0) 推荐(0) 编辑
摘要: 1反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 2反射机制能做什么 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的 阅读全文
posted @ 2017-05-04 17:21 牛头人 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 在操作系统中,信号量是个很重要的概念,它在控制进程间的协作方面有着非常重要的作用,通过对信号量的不同操作,可以分别实现进程间的互斥与同步。当然它也可以用于多线程的控制,我们完全可以通过使用信号量来自定义实现类似Java中的synchronized、wait、notify机制。 Java并发包中的信号 阅读全文
posted @ 2017-05-04 16:51 牛头人 阅读(526) 评论(0) 推荐(0) 编辑
摘要: CyclicBarrier(又叫障碍器)同样是Java 5中加入的新特性,使用时需要导入Java.util.concurrent.CylicBarrier。它适用于这样一种情况:你希望创建一组任务,它们并发地执行工作,另外的一个任务在这一组任务并发执行结束前一直阻塞等待,直到该组任务全部执行结束,这 阅读全文
posted @ 2017-05-04 16:48 牛头人 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 简单使用Lock锁 Java 5中引入了新的锁机制——Java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作。Lock接口有3个实现它的类:ReentrantLock、ReetrantReadWriteLock.Rea 阅读全文
posted @ 2017-05-04 16:43 牛头人 阅读(502) 评论(0) 推荐(0) 编辑
摘要: 阻塞队列 阻塞队列是Java 5并发新特性中的内容,阻塞队列的接口是Java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、S 阅读全文
posted @ 2017-05-04 16:40 牛头人 阅读(284) 评论(0) 推荐(0) 编辑
摘要: Executor框架简介 在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 阅读全文
posted @ 2017-05-04 16:35 牛头人 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 主内存与工作内存 java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量主要是指共享变量,存在竞争问题的变量。Java内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用到的 阅读全文
posted @ 2017-05-04 16:26 牛头人 阅读(288) 评论(0) 推荐(0) 编辑
摘要: happen—before规则介绍 Java语言中有一个“先行发生”(happen—before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说,在发生操作B之前,操作A产生的影响都能被操作B观察到,“影响”包括修改了内存中共享变量的值、发送了消 阅读全文
posted @ 2017-05-04 16:20 牛头人 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 加锁和volatile变量两者之间的区别: 1、volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。 2、从内存可见性的角度看,写入volatile变量相当 阅读全文
posted @ 2017-05-04 16:15 牛头人 阅读(4905) 评论(0) 推荐(0) 编辑
摘要: 加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另外一个重要的方面:内存可见性。我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且还希望确保当一个线程修改了对象状态后,其他线程能够看到该变化。而线程的同步恰恰也能够实现这一点。 内置锁可以用于确保某个 阅读全文
posted @ 2017-05-04 16:10 牛头人 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。 这里实现如下情况的生产--消费模型: 生产者不断交替地生产两组数据“姓名--1 --> 内容--1”,“姓名--2--> 内容--2”,消费者不断交替地取得这两组数据,这 阅读全文
posted @ 2017-05-04 16:08 牛头人 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 在java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调用notify()方法或notifyAll()方法),在线程中调用notify()方法或notify 阅读全文
posted @ 2017-05-04 16:03 牛头人 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 当线程需要同时持有多个锁时,有可能产生死锁。考虑如下情形: 线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2。接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B正持有lock2,因此线程A会阻塞等待线程B对lock2的释放。如果此时线程B在持有lock2的时候,也 阅读全文
posted @ 2017-05-04 16:01 牛头人 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 在集合API中,最初设计的Vector和Hashtable是多线程安全的。例如:对于Vector来说,用来添加和删除元素的方法是同步的。如果只有一个线程与Vector的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能会带来死锁。因此,对于更改集合内容的方法 阅读全文
posted @ 2017-05-04 16:00 牛头人 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。 采用synchronized修饰符实现的同步机制叫做互斥锁机 阅读全文
posted @ 2017-05-04 15:55 牛头人 阅读(378) 评论(0) 推荐(0) 编辑
摘要: Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势: 1、可以避免由于Java的单继承特性而带来的局限; 2、增强程序的健壮性,代码能够被多个线程 阅读全文
posted @ 2017-05-04 15:53 牛头人 阅读(1139) 评论(0) 推荐(1) 编辑
摘要: volatile用处说明 在JDK1.2之前,java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。 在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不 阅读全文
posted @ 2017-05-04 15:50 牛头人 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 守护线程 JAVA中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检 阅读全文
posted @ 2017-05-04 15:24 牛头人 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件——其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁。另外,在长时间 阅读全文
posted @ 2017-05-04 15:20 牛头人 阅读(461) 评论(0) 推荐(0) 编辑