1. 请你简述一下synchronized与java.util.concurrent.locks.Lock的相同之处和不同之处?
Synchronized与Lock两者都可以实现线程同步,它们的区别在于synchronized是一个Java关键字,而Lock是一个接口,synchronized能够自动加锁,自动解锁,而Lock接口需要我们手动开启锁,再手动解锁。
2. JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?
使用多线程时,一种非常简单的避免死锁的方式就是:指定锁的顺序,并强制线程按照指定的顺序获取锁。因此所有的线程都是以同样的加锁和释放锁,就不会出现死锁了。
3. 请问什么是死锁(deadlock)?
死锁是因为两个线程进行资源抢占或通信上产生冲突而导致的程序阻塞的现象,即这个线程可能占有了另一个线程所需的资源,而另一个线程占据了该线程所需的资源。
4. 请解释hashCode()和equals()方法有什么联系?
在java中,equals()比较相等的两个对象,hashcode相等,而hashcode相等的两个对象,不一定相等。
5. 若对一个类不重写,它的equals()方法是如何比较的?
如果没有重写equals()方法那么将直接比较对象的引用堆内存的地址是否相等,如果重写了equals()方法那么比较两个对象的值是否相等。