FWQ
使用 volatile 变量控制多线程交替打印「FooBar」时如何避免死锁?
使用两个 volatile 变量控制多线程时死锁问题 题目要求设计一个多线程程序交替打印「foobar」。开发者按照题意使用了两个 volatile 变量控制多线程逻辑,但运行后程序卡死在 while 循环中。 原因分析 使用 volatile 变量确实可以防止指令重排序,但它不能解决线程同一片段内存区域时可能出现的共享变量竞争问题。while 循环中的 busy-wt 代码导致线程一直占用 cpu 资源,无法释放锁,从而造成死锁。 解决方案 为了解决死锁问题,可以使用 wait() 和 notify()/notifyall() 来实现线程之间的协调,从而避免忙等待。 修改后的代码如下: class FooBar { private…