我了解在多个线程之间访问共享实例变量是不安全的(除非该变量已声明volatile
且正确synchronized
)。我试图理解使用 Android 将共享实例变量传递给后台线程的语义AsyncTask
。
考虑以下代码:
public class Example {
ContentValues contentValues;
public void start() {
contentValues = new ContentValues();
contentValues.put("one", 1);
new MyAsyncTask().execute(contentValues);
contentValues.put("two", 2);
}
class MyAsyncTask extends AsyncTask<ContentValues, Void, Boolean> {
@Override
public void onPreExecute() {
contentValues.put("three", 3);
}
@Override
protected Boolean doInBackground(ContentValues... cvs) {
ContentValues cv = cvs[0];
return cv == contentValues;
}
}
}
我们对局部变量cv
in的状态了解doInBackground()
多少?具体来说,
保证其中包含哪些键值对。
其中可能包含哪些键值对?
会
doInBackground()
返回什么?