1. 什么是线程安全?
答: 线程安全意味着多个线程可以同时访问一个类的实例而不引起任何问题或不一致的结果。线程安全的代码会通过同步机制来确保所有线程都能正确地访问共享资源。
2. 解释Java中的synchronized关键字。
答: synchronized
关键字在Java中用于控制对共享资源的并发访问。它可以用于修饰一个方法或者代码块。使用synchronized
时,一个线程在访问同步的方法或代码块时会持有对象的锁,直到它完成执行,这时锁会被释放,其他线程才能访问。
3. Java中的锁有哪些类型?
答: Java提供了多种锁类型,包括:
- 内部锁(监视器锁):默认的锁,通过
synchronized
关键字实现。 - 显式锁(ReentrantLock):允许更灵活的锁管理,可以尝试非阻塞地获取锁,可以被中断。
- 读写锁(ReadWriteLock):允许多个读线程同时访问,但写线程访问时是独占的。
- 印章锁(StampedLock):提供了一种优化的读写锁实现,通过使用方法返回的戳来控制锁。
4. 什么是死锁?
答: 死锁是一种程序执行过程中的错误状态,当多个线程互相等待对方释放资源,从而导致所有线程都无法继续执行。通常发生在每个线程持有一些资源同时试图获取其他线程持有的资源时。