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個贊
添加回答
舉報