【发布时间】:2010-06-16 23:46:43
【问题描述】:
我一直在研究 Java 中的线程以了解它们(这似乎是最好的方法),现在了解 synchronize、wait() 和 notify() 发生了什么。
我很好奇是否有一种方法可以同时等待两个资源。我认为以下内容不会完全符合我的想法(edit:请注意,此示例中省略了通常的 while 循环,仅专注于释放两个资源):
synchronized(token1) {
synchronized(token2) {
token1.wait();
token2.wait(); //won't run until token1 is returned
System.out.println("I got both tokens back");
}
}
在这种(非常做作的)情况下,token2 将被保留直到 token1 返回,然后 token1 将被保留直到 token2 返回。目标是释放 token1 和 token2,然后在两者都可用时恢复(请注意,将 token1.wait() 移到内部同步循环之外并不是我想要的)。
检查两者是否可用的循环可能更适合实现此行为(这会接近双重检查锁定的想法吗?),但会占用额外的资源 - 我不寻求明确的解决方案,因为这只是为了满足我的好奇心。
编辑 让我们只是为了争论,这里的两个标记代表线程必须同时使用的两个不同资源,而其他一些线程将同时需要这两个资源.
【问题讨论】:
标签: java multithreading monitor wait synchronized