Java多线程——锁(锁的基本概念、种类、特性以及与其他概念的关系)-面试题+答案——第10期

锁是多线程编程中重要的同步机制,涉及到线程的互斥、协作等方面。

  1. 什么是锁?在多线程编程中为什么需要锁?

    • 答案:
      • 锁是一种同步机制,用于控制多个线程对共享资源的访问。
      • 在多线程编程中,需要锁来确保多个线程之间的协同和互斥,防止竞态条件和数据不一致问题。
  2. Java中有哪些类型的锁?

    • 答案:
      • Java中有隐式锁(如synchronized关键字)、显式锁(如ReentrantLock)、读写锁(如ReentrantReadWriteLock)等。
  3. synchronized关键字和ReentrantLock有什么区别?

    • 答案:
      • synchronized是隐式锁,JVM自动管理,简单易用。
      • ReentrantLock是显式锁,提供了更灵活的控制,支持可中断锁、定时锁、公平锁等。
  4. 什么是可重入锁?ReentrantLock是可重入锁吗?

    • 答案:
      • 可重入锁允许同一线程多次获得同一把锁。
      • ReentrantLock是可重入锁,同一线程可以多次获得锁。
  5. 什么是死锁?如何避免死锁?

    • 答案:
      • 死锁是指两个或多个线程无法继续执行,因为每个线程在等待其他线程释放锁。
      • 避免死锁的方法包括按照固定的顺序获取锁、设置超时时间、使用tryLock等。
  6. 什么是乐观锁和悲观锁?

    • 答案:
      • 乐观锁假设冲突很少发生,通过版本号等机制来实现,例如StampedLock
      • 悲观锁假设冲突经常发生,使用互斥的方式,例如ReentrantLock
  7. 什么是读写锁?有什么优势?

    • 答案:
      • 读写锁允许多个线程同时读取共享资源,但只有一个线程能够写入。
      • 优势在于在读多写少的场景下,可以提高并发性能。
  8. 什么是公平锁和非公平锁?ReentrantLock支持哪种锁?

    • 答案:
      • 公平锁按照请求锁的顺序获取锁,非公平锁允许插队。
      • ReentrantLock可以通过构造方法指定是公平锁还是非公平锁,默认是非公平锁。
  9. 什么是锁粗化(Lock Coarsening)?

    • 答案:
      • 锁粗化是指在一段代码中多次加锁解锁,如果这些操作都在很短的时间内完成,可以合并为一次锁操作,减少锁操作的开销。
  10. 什么是CAS(Compare and Swap)操作?它与锁有什么关系?

    • 答案:
      • CAS是一种原子操作,比较并交换。在多线程环境中用于实现非阻塞算法。
      • 与锁有关系,例如java.util.concurrent.atomic包中的AtomicInteger等类就是基于CAS实现的。
  11. 什么是自旋锁?它适用于什么场景?

    • 答案:
      • 自旋锁是一种不断尝试获取锁的线程,而不是进入阻塞状态。
      • 适用于锁的持有时间很短的情况,避免线程进入阻塞状态的开销。
  12. 什么是可中断锁?如何实现可中断锁?

    • 答案:
      • 可中断锁允许在等待锁的过程中被其他线程中断。
      • ReentrantLock可以通过lockInterruptibly方法实现可中断锁。

这些问题涵盖了锁的基本概念、种类、特性以及与其他概念的关系。在回答这些问题时,确保理解每个概念,并能够通过实际的例子说明理解。

你可能感兴趣的:(Java基础,java,开发语言)