2 回答

TA贡献2012条经验 获得超12个赞
使用循环怎么样,您在运行时遍历Resources可用列表,然后在每次迭代时获取对象上的锁,这是一个示例,我在Object该类中演示了这一点:
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
list.addAll(Arrays.asList(new Object(), new Object(), new Object()));
Runnable run = () -> {
for(Object o: list) {
synchronized (o) {
System.out.println("Current thread " + Thread.currentThread().getName());
System.out.println(o.hashCode());
try {
Thread.sleep(2000);
}catch (InterruptedException ie){
ie.printStackTrace();
}
//do something useful
}
}
};
new Thread(run, "t1").start();
new Thread(run, "t2").start();
new Thread(run, "t3").start();
new Thread(run, "t4").start();
}
当一个线程获得了特定对象的锁时,其他线程将等待它,但它们可以自由地从 for-each 循环中获取下一个可用对象的锁。

TA贡献1875条经验 获得超3个赞
添加回答
举报