我一直在搞乱Java 中的线程来了解它们(这似乎是最好的方法),现在了解同步、wait() 和 notify() 发生了什么。
我很好奇是否有一种方法可以同时等待两个资源。我认为以下内容不会完全符合我的想法(编辑:请注意,此示例中省略了通常的 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() 移到内部同步循环之外并不是我想要的)。
检查两者是否可用的循环可能更适合实现这种行为(这会接近双重检查锁定的想法吗?),但会占用额外的资源 - 我不是在寻求最终的解决方案,因为这只是来满足我的好奇心。
编辑让我们只是为了争论,这里的两个标记代表线程必须同时使用的两个不同的资源,而其他一些线程将同时需要这两个资源。