任何人都可以向我解释什么是竞争条件,如何避免它,以及如何在 Java 代码中找到它?
好吧,我几天才知道“比赛条件”,我有两个例子,也许它们不够好,这就是为什么我需要你的帮助:) 希望你们中的任何一个都可以为我解释一下。
示例1:检查然后采取行动:
if(vector.contains(e))//check
{
vector.remove(e)
}
如果有2个线程可以访问,thread1在check vector包含e后挂起,e在vector中,然后thread2访问check,然后从vector中删除e,然后thread1回来做remove动作,会出错,因为e是已被thread2删除。
示例2:读取修改写入:
假设我们在方法中有一个计数器变量,一旦方法被调用,计数器增加 1,
counter++
这不是原子操作,它有 3 个步骤:1. 获取值 2. 增加值 3. 分配给值
我对比赛条件的了解都在这里,希望你能和我分享你的知识:)
谢谢