我刚刚在Java中使用线程搞乱了我的头(这似乎是最好的方法),现在了解同步发生了什么,wait()和notify()。在Java中可以同时在两个锁上调用wait()(6)
我很好奇是否有办法一次等待两个资源。我想下面就不太做我在想什么的(编辑:注意,通常while循环已经离开了这个例子的重点只是腾出两种资源):
synchronized(token1) {
synchronized(token2) {
token1.wait();
token2.wait(); //won't run until token1 is returned
System.out.println("I got both tokens back");
}
}
在这个(非常人为的)情况下,令牌2将被保留,直到令牌1被返回,然后令牌1将被保留,直到令牌2被返回。目标是释放token1和token2,然后在两者都可用时恢复(请注意,在内部同步循环之外移动token1.wait()并不是我所掌握的)。
一个检查两者是否可用的循环可能更适合实现这种行为(这是否会接近双重检查锁定的想法?),但会占用额外的资源 - 我没有经过明确的解决方案因为这只是为了满足我的好奇心。
编辑让我们只是为了争辩说,这里的两个标记代表两个不同的资源,线程必须同时使用两个不同的资源,而其他一些线程将同时需要两个资源。
我想你的意思是某种标志,而不是第二锁?像'while(!flag){token1.wait();}' – 2010-06-17 00:30:45