- 浏览: 10395 次
- 性别:
- 来自: 北京
最新评论
文章列表
在编写Spring 时,会遇到循环依赖的问题,如下:
<bean id="cycleA" class="di.cycledependency.CycleDependencyA">
<constructor-arg ref="cycleB"/>
</bean>
<bean id="cycleB" class="di.cycledependency.CycleDependencyB">
<constructor-ar ...
1.通过构造函数创建
<bean id='injectBean' class="di.InjectBean"></bean>
<bean id="diConstruct" class="di.DependencyInjectConstruct">
<constructor-arg type="java.lang.String" value="Inject construct test"/>
< ...
WeakHashMap包路径java.util.WeakHashMap,基于HashMap实现原理同时在保存键时引入了WeakReference(弱引用),这样可以达到引用但不影响gc回收此引用实例的目的,其可以尽量避免内存泄漏的情况出现。这里的弱引用简单解释下,相对于我们平时开发中用的引用关系(即强引用),弱引用不会影响gc对垃圾实例的判断,也就是弱引用中的实例如果不存在强引用是可以被gc的,但被gc回收的时机是不确定的,其依赖gc的运行。
应用场景举例:
如果一个实例键值已经存在强引用,同时我们也需要利用此键值建立其他的映射关系,当此键值无用时(即强引用消失后,那么后来建立的映射关系 ...
java在jdk1.3中推出了定时器类Timer,而后在jdk1.5后由Dou Lea从新开发出了支持多线程的ScheduleThreadPoolExecutor,从后者的表现来看,可以考虑完全替代Timer了。
Timer与ScheduleThreadPoolExecutor对比:
1.
Timer始于jdk1.3,其原理是利用一个TimerTask数组当作队列,将所有定时任务添加到此队列里面去。 然后启动一个线程,当队列为空时,此线程会阻塞,当队列里面有数据时,线程会去除一个TimerTask来判断
是否到时间需要运行此任务,如果运行时间小于或等于当前时间时则开始运行任 ...
锁的理解
锁产生于多线程并发应用,其作用是解决共享对象的同步同时也可以控制线程的行为。我认为锁不仅仅限于synchronize,ReentrantLock,ReadWriteLock.同时也包括CountDownLack, FutureTask, Semaphore, CyclicBarrier, Exchanger这些平时接触不多的并发控制类。后者经常会用在控制线程的运行行为。
1.
CountDownLack 这种锁经常用来控制多个线程同时启动,并且能够及时感知这些线程是否全部运行结束。举例如下:
例子中m_begin用来为那10个线程发送启动指令,当m_begin.coun ...
摘自:http://yanguz123.iteye.com/blog/1934766
Jdk1.7的新特性:
1,switch中可以使用字串
Java代码:
String s = "test";
switch (s) {
case "test" :
System.out.println("test");
case "test1" :
System.out.println("test1");
break ;
defaul ...
文章摘抄自:http://jingyan.baidu.com/article/ff41162582507512e5823763.html
前言
java中==、equals()、hashCode()都和对象的比较有关,在java中这三者各有什么用处呢,即java中为什么需要设计这三种对象的比较方法呢?
关于==
==是容易理解的。java设计java就是要比较两个对象是不是同一个对象。
对于引用变量而言,比较的时候两个引用变量引用的是不是同一个对象,即比较的是两个引用中存储的对象地址是不是一样的。
对于基本数据类型而言,比较的就是两个数据是不是相等,没什么歧义。
...
泛型,通配符
(1)
传参时要求类型为B,那么可以传入B或B的子类型
获取返回值时,如果返回的类型是B,那么接收他的类型可以是B或者B的父类型。
(2)
<? extends T>表示其定义的泛型范围为T及其子类型
<? super T>表示其定义的泛型范围为T及其父类型
(3)
object是所有类的父类,NULL代表所有类型
(4)举例:
设:B extends A, C extends B
List<? extends B> list = new ArrayList<B>();//表示list存放的是B或者B的子类。
//list.add( ...