面试问题总结

1.重写了Bean的equals方法,初始化两个属性相同的该Bean,放入HashSet中,最终会有几个元素?

答案:2个
虽然重写了equals方法,但是没有重写hashcode方法,所以hashSet在put的时候首先检查两个对象的hashcode是否相同,所以这两个Bean虽然属性一样,但hashcode不同,因此认为是不同的

2.synchronized对象锁和synchronized类锁的区别

类锁是指synchronized作用于静态方法或者代码块中

synchronized static public void getName(){}
synchronized (.class){}

对象锁是指synchronized作用于非静态方法时

synchronized public void getName(){}

区别

  • .同个对象在多个线程中去调用synchronized作用的代码块,方法时需要获取对象锁。一个对象的对象锁是唯一的,只有一个线程可以拿到,因此当有线程在执行synchronized的方法时,其他线程需要进入阻塞队列等待
  • 同个对象在多个线程中去调用不同的synchronized作用的代码块时,也需要获取锁,等待锁释放
  • 同类的不同对象在多个线程中去调用synchronized作用的代码块、方法时需要获取对象锁。一个类的类锁是唯一的,只有一个线程可以拿到,因此当有对象在线程执行synchronized的方法时,其他线程的对象需要进入阻塞队列等待。
  • 同个类的不同对象在多个线程中去调用不同的synchronized方法时也是需要等待的。
  • 另外,如果多线程同时访问同一类的 类锁(synchronized 修饰的静态方法)以及对象锁(synchronized 修饰的非静态方法)这两个方法执行是异步的,原因:类锁和对象锁是2中不同的锁
  • 类锁对该类的所有对象都能起作用,而对象锁不能。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容