- 数组去重:List的indexOf(),以key-value,不能有重复的key的map进行数组的去重。
-
java中创建线程的三种方法
1)继承Thread类创建线程
2)实现Runnable接口创建线程
3)使用Callable和Future创建线程
3.Io,Bio(性能最差),Nio(字符缓冲区)
4.jdk1.6过多的substring会导致内存泄漏(substring内存泄漏的问题是出现于jdk1.6),1.7就不用担心这个问题。
5.不通过构造函数也能创建对象吗?(能)
答:1)用new语句创建对象,这是最常见的创建对象的方法。 (调用了构造方法)
2)运用反射的手段创建对象,,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。 (调用了构造方法)
3)调用对象的clone(克隆)方法
4)运用反序列化的手段,调用java.io.ObjectInputStream对象的 readObject()方法。
(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。
6.线程池的submit和execute方法区别
1.接受的参数不一样
2.submit有返回值,而execute没有返回值
3.submit方便Exception处理
7.SimpleDateFormat非线程安全,解决方法
用线程池可以模拟出SimpleDateFormat的线程安全问题,每使用一个SimpleDateFormat对象进行日期-时间进行format和parse方法的时候就会创建一个新的SimpleDateFormat对象用完销毁 simpleDateFormat = null; //销毁对象,就可以解决该线程安全问题。
总结:综上所述,使用SimpleDateFormat对象进行日期-时间计算时,如果SimpleDateFormat是多个线程共享的就会有线程安全问题!应该让每一个线程都有一个独立的SimpleDateFormat对象用于日期-时间的计算!此时就可以使用ThreadLocal将SimpleDateFormat绑定到线程上,是的该线程上的日期-时间计算顺序的使用SimpleDateFormat对象,这样也可以避免线程安全问题!