FWQ
Java 线程并发:为什么线程睡眠后另一个线程会从方法内部开始执行?
java线程问题探析 问题描述: 在 Head First Java 中的示例代码探究线程并发性时,发生了如下输出: 其中,前两句由一个线程执行,随后该线程进入睡眠状态。问题在于,在该线程睡眠期间,另一个线程并非从头开始执行,而是从 makeWithdrawl 方法内部开始。 立即学习“”; 问题解答: 理解该现象的关键在于线程并发性的本质。当两个线程同时运行时,它们并非按照严格的顺序执行,而是争用 CPU 资源。即使一个线程进入睡眠状态,另一个线程也可能从该线程执行的任意位置中断执行。 如示例代码所示,两个线程共享一个 BankAccount 对象,并同时对该对象的余额进行操作。当第一个线程进入睡眠状态时,第二个线程正好处于 makeWithdrawal 方法的内部。这是因为: sleep() 方法并非立刻让出 CPU 资源。 在第一个线程调用 sleep() 方法之前,它已经获取了 BankAccount…