【发布时间】:2017-06-02 10:53:04
【问题描述】:
我在我的编解码器中使用了同步语句,并且块中有一个“中断”:
for (int j = 0; j < testPathSize; j++) {
synchronized (lock) {
if (kpis.get(j).getDate() > startTimeInMs) {
if (j > 0) {
if ((kpis.get(j).getDate() - startTimeInMs)
> (startTimeInMs - kpis.get(j - 1).getDate())) initTestPath = j - 1;
else initTestPath = j;
} else initTestPath = j;
break;
}
}
}
我想知道break什么时候执行,“锁”会被释放?
谢谢。
【问题讨论】:
-
请发布更多代码,因为我们无法引用您发布的 sn-p,因为它太小了 - 例如。同步块内的 while/break 不会释放锁。
-
您应该尝试设计您的代码,使任何线程都不需要持有锁的时间超过更新一些变量所需的时间。 Google 的“乐观锁定”可以找到一些示例,说明即使在可能发生冲突的操作序列很长的情况下也能实现这一目标。
标签: java multithreading break synchronized