【发布时间】:2021-03-16 08:24:55
【问题描述】:
我有一个分配,其中我有 2 个线程,它们使用共享单例类实例来存储资源列表。 当一个线程接收到一个事件时,他会尝试使用共享实例获取资源。通过创建一个布尔字段来获取资源,该字段说明他是否可以为假。 问题是,如果一个线程正在使用另一个线程所需的资源,那么另一个线程在等待第二个线程完成时会做什么?我能想到的只是一个 while 循环,它在他获得所有必需的资源之前不会停止,但它很忙,我试着想一个不同的方法。
public class Thread1{
private SharedObject sharedObject;
public void acquire objects(List<Integer> indexes){
for(int i=0;i<indexes.size;i++){
sharedObject.acquire(indexes[i]);
}
}
}
// I have another Thread which is implemented the same way
public class SharedObject{
private List<SomeObject> someObjects;
public synchronized void acquire(int index){
someObjects[index].acquire();
}
}
public class SomeObject{
private boolean isFree = true;
public void acquire(){
isFree = False;
}
}
所以我的问题是,如果其中一个资源在我尝试获取它们时已经在使用中该怎么办
【问题讨论】:
-
听起来您正在尝试重新发明条件变量。查看
Condition和java.util.concurrent.locks 中的其他类。 java.util.concurrent 的包文档可能也很有趣。
标签: java multithreading concurrency synchronization thread-safety