對於下面的例子的對象:爪哇等待在另一個線程
public Car getCar(int id){
Car result= findCarInCache(id);
if (result==null){
// POINT A
return createCarWithId(id);
} else {
return result;
}
}
public Car findCarInCache(int id){
// Do something for find a car with this id in the cache
}
public void addToCache(Car car){
// Add the car to the cache
}
public Car createCarWithId(int id){
Thread.sleep(10000);
Car result= new Car(id);
addToCache(Car);
return result;
}
問題是當兩個線程調用同時getCar(2)例如。然後兩個線程都到達POINT A,並且生成Car#2的兩個實例。我如何讓第二個線程在POINT A處等待,直到第一個線程完成創建,然後在兩個調用中返回相同的對象? (我在Android中這樣做)
感謝
http://docs.oracle.com/javase/tutorial/essential/concurrency/。或者類似的,一本關於java的初學者書。如果你使用線程,你需要了解併發性 –