产生死锁有四个条件:互斥、请求和保持、不可抢占、循环等待。
只要任意一个条件不成立,死锁就不会发生。
六,HashMap和Hashtable的区别
1、线程安全
Hashtable 是线程安全的,HashMap 不是线程安全的。
2、性能优劣
既然 Hashtable 是线程安全的,每个方法都要阻塞其他线程,所以 Hashtable 性能较差,HashMap 性能较好,使用更广。
如果要线程安全又要保证性能,建议使用 JUC 包下的 ConcurrentHashMap。
3、NULL
Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。
4、实现方式
Hashtable 的继承源码:
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable
HashMap 的继承源码:
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
可以看出两者继承的类不一样,Hashtable 继承了 Dictionary类,而 HashMap 继承的是 AbstractMap 类。
Dictionary 是 JDK 1.0 添加的,貌似没人用过这个,栈长我也没用过。。
5、容量扩容
HashMap 的初始容量为:16,Hashtable 初始容量为:11,两者的负载因子默认都是:0.75。
当现有容量大于总容量 * 负载因子时,HashMap 扩容规则为当前容量翻倍,Hashtable 扩容规则为当前容量翻倍 + 1。
6、迭代器
HashMap 中的 Iterator 迭代器是 fail-fast 的,而 Hashtable 的 Enumerator 不是 fail-fast 的。
所以,当其他线程改变了HashMap 的结构,如:增加、删除元素,将会抛出 ConcurrentModificationException 异常,而 Hashtable 则不会。
七,springMVC中Jackson的使用
在springmvc项目中使用ajax的时候,Controller层方法使用@ResponseBody注解,他会返回前端json对象给前端,我们方法只需要返回对象集合,对象,字符串等都可以返回json对象,这个是spring帮我们使用jackson做了
我们只需要在spring中配置jackson即可。