12.5.1 线程安全问题

更新于 2026年10月10日 版权声明
12.5.1 线程安全问题

在实际开发过程中,很多程序都会采用多线程的方式来实现,如火车站售票系统等。如12.2.3节中介绍的使用Runnable方式实现多个窗口售票的示例,在程序运行结果中出现了“正在销售第0张票”的问题,如图12.17所示。

图示

图12.17 多线程错误输出效果图(https://www.daowen.com)

在之前的代码中,程序在售票之前会判断当前票数tickets是否大于0,如果大于0则执行将票出售给乘客。但当有两个或更多个线程同时访问这段代码时,如果当前车票只有1张,那么就会发生上图中出现的错误。窗口1发现当前票数为1,出售这张车票;而窗口2已经通过是否有票的判断,认为当前票数为1,于是窗口2也进入了售票步骤,这样就会出现销售第0张票的问题。如果售票窗口增加,即执行售票操作的线程增加,甚至还有可能出现负数的情况。

因此,在编写多线程程序时,应该考虑线程安全问题,即确保某个资源在同一时刻只能被一个线程访问。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)