次のコードはスレッドセーフですか? 1 つのスレッドから 1 つの書き込みと複数の読み取りしかない (以下に示すように while ループを使用) にもかかわらず、実際dataReady
に beに設定する必要がありますか?volatile
public class MyApplication extends Application
{
/* a flag indicates if the data is fully retrieved from the database */
private volatile boolean dataReady = false;
@Override
public void onCreate()
{
super.onCreate();
new AsyncTask<Void, Void, Void>()
{
@Override
protected Void doInBackground(Void... params)
{
// retrieve data from the database
return null;
}
@Override
protected void onPostExecute(Void result)
{
dataReady = true;
}
}.execute();
}
public boolean isDataReady()
{
return dataReady;
}
}
他のスレッド (メインスレッドではない):
while(!getApplication().isDataReady()); // wait until the data is ready