◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
在了解 Head First Java 中的线程问题之前,首先需要了解线程并发的概念。线程是一种轻量级进程,它与其他线程共享同一个进程的内存空间。这允许线程同时执行代码,从而提高性能。
在示例代码中,BankAccount 类表示一个银行账户,具有 getBalance() 和 withdraw() 方法。RyanAndMonicaJob 类实现了 Runnable 接口并创建了一个新的 BankAccount 对象,用于模拟两个线程 Ryan 和 Monica。
main() 方法在两个线程上启动了 RyanAndMonicaJob 类的 run() 方法。run() 方法包含一个 for 循环,用于对 BankAccount 对象进行 10 次取款操作。makeWithdrawal() 方法检查账户余额是否足够,如果足够,则从账户余额中扣除取款金额。
问题是,输出显示 Ryan 线程在前两行执行后进入了休眠状态。此时,期望第二个线程 Monica 能够从头开始执行,然而,它却从 makeWithdrawal() 方法的中间部分开始执行。
立即学习“Java免费学习笔记(深入)”;
这是因为线程调度程序负责管理线程的执行,并且它不受 Java 虚拟机 (JVM) 代码控制。在示例中,线程调度程序中断了 Ryan 线程的执行,允许 Monica 线程在 Ryan 线程休眠时继续执行。
因此,第二个执行的线程并不是从头开始执行,而是从中断点继续执行。线程调度程序的目的是优化性能并最大限度地利用 CPU 资源,这是通过在不同的线程之间切换来实现的,即使线程当前正在执行代码也是如此。
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。