我不确定我是否正确实施了ReentrantReadWriteLock,所以如果我做错了可以告诉我,我将不胜感激。
方案: 想象一下,制作衬衫需要两个步骤。衬衫都是相同的。
步骤1和2分别使用10个缝纫工具和10个扣件工具。按钮保存在橱柜的不同架子上。
我的目标是确保尽可能多的并发性,同时确保线程不会:
因此,我已将锁实现为以下代码:
Lock firstLock = new ReentrantReadWriteLock();
Lock secondLock = new ReentrantReadWriteLock();
if (buttoningTool.ready()) { //check if buttoning-tool is ready
firstLock.writeLock();
if (cupboard.getButton()) { //get button from any available shelf and return true if successful
int shirtNumber = -1;
for (tempSewingTool : allSewingTools) {
if (tempSewingTool.shirtReady()) {
secondLock.writeLock();
shirtNumber = tempSewingTool.takeShirt();
secondLock.unlock();
break;
}
}
if (shirtNumber != 1) {
buttoningTool.activate();
}
}
firstLock.unlock();
}
问题:
是否有必要实现secondLock?这是因为firstLock已经锁定了代码并阻塞了其他线程。
假设两个锁确实是必需的,是否需要创建两个ReentrantReadWriteLock对象来提高并发性?我参考了这个链接 - http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
我读过线程和交错,但我不明白以下语句中“interleaved”的含义。有人可以用非专业术语向我解释一下吗?
引用:没有理由阻止c1的更新与c2的更新交错
来源:http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
提前致谢!