Java基础面试题3【合集】
半塘 2023/8/20 Java
# 多线程、并发及线程的基础问题
# 1、Java 中能创建 volatile 数组吗?
# 2、volatile 能使得一个非原子操作变成原子操作吗?
# 3、volatile 修饰符的有过什么实践?
答案
- 线程通信:在多线程编程中,volatile 关键字可用于实现简单的线程通信,比如一个线程修改了共享变量的值,另一个线程需要立即看到修改后的值。
- 状态标记:可以使用 volatile 来标记一个线程的状态,比如一个标志位来控制线程的启动、暂停、停止等状态。
- 双重检查锁定:在单例模式的双重检查锁机制中,可以使用 volatile 来确保线程安全,避免出现多线程环境下的问题。
- 计数器、标记等场景:volatile 可以用于简单的计数器、标记变量等,保证在多线程环境下的可见性和一致性。
# 4、volatile 类型变量提供什么保证?
# 5、10 个线程和 2 个线程的同步代码,哪个更容易写?
答案
- 在理论上,编写只涉及两个线程的同步代码要比涉及多个线程的同步代码更容易。这是因为在涉及多个线程的同步代码中,需要考虑更多的线程交互和竞争条件,可能会引发更多的并发问题。
- 当只涉及两个线程时,可以使用简单的同步原语(如 synchronized、wait()、notify()等)来实现线程之间的同步和通信。控制仅涉及两个线程的同步代码流程也相对简单,更易于管理和调试。
- 相比之下,当有多个(如10个)线程参与时,需要考虑更多的线程调度、资源共享、死锁等并发问题。在这种情况下,需要更复杂的同步机制和更细致的设计来保证程序的正确性和可靠性。
- 所以,在实际编码中,通常建议先尽量将复杂的并发问题分解为更小的部分,在掌握了对两个线程同步的实现后,再逐步扩展到更多线程参与的场景。这样有利于更好地理解并发编程的基本原理和技术,并提高代码的可维护性和稳定性。