我在线程1中有以下代码:
synchronized (queues.get(currentQueue)) { //line 1
queues.get(currentQueue).add(networkEvent); //line 2
}
以及线程2中的以下内容:
synchronized (queues.get(currentQueue)) {
if (queues.get(currentQueue).size() > 10) {
currentQueue = 1;
}
}
现在我的问题是:currentQueue变量当前的值为0。当线程2将currentQueue的值更改为1,并且线程1在第1行等待(由于已同步)时,线程1会在行中使用更新后的currentQueue值吗?线程2完成后的2(这就是我想要的)。
最佳答案
这个问题的答案取决于它。我假设还有其他代码块可以增加currentQueue变量。在这种情况下,锁定不会发生在'currentQueue'变量上,也不会发生在'queue'的集合上,而是发生在'队列的集合。
因此,如果两个线程碰巧都访问相同的队列(例如队列5),那么您问题的答案是肯定的。但是,发生这种情况的可能性是十分之一(十分之一的机会,其中x =“队列”集合中的数目或队列)。因此,如果线程访问不同的队列,那么答案是否定的。