【发布时间】:2013-10-20 16:20:40
【问题描述】:
我在线程 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。这就是您应该规范访问(并最终同步)的内容,尤其是当它以读/写方式访问时。
-
当然是的,因为线程二先拿到锁并操作数据,所以线程二解锁,线程一获取锁后,就有线程二修改的数据了。
标签: java multithreading arraylist synchronized