С учетом следующего кода:
public class SomeClass {
private boolean shouldBlock = false;
private Object resource;
public void handleDrawRequest(Canvas canvas) {
if (!shouldBlock && resource == null)
{
shouldBlock = true;
loadTheResource(); //which takes awhile
shouldBlock = false;
}
else if (shouldBlock && resrouce == null)
{
return; //another thread is taking care of the loading of the resource
//and its not ready yet, so just ignore this request
}
drawResourceOn(canvas);
}
}
Как я могу сделать этот поток кода безопасным? Я пытаюсь выполнить один и только один поток для загрузки ресурса, в то время как любой другой поток, пытающийся одновременно получить доступ к этому коду, будет отброшен (например, следуйте логике «else if») до загрузки ресурса. Может быть много потоков, пытающихся получить доступ к этому коду одновременно, и я не хочу синхронизировать весь метод, и у меня накапливается целый стек потоков.