假設我有一個不變的Model
類:我的自定義異步任務應該對傳入構造函數的內容有同步訪問嗎?
class Model {
final String id;
Model(String id) {
this.id = id;
}
}
而且我有一個自定義Task
類:
class Task extends BlaBlaTask {
final Model model;
Task(Model model) {
this.model = model;
}
// runs on a background thread
void doInBackground() {
// do smth with model, e.g.:
String id = model.id;
}
}
而且兩者Model
和Task
實例在主UI線程上創建。但是doInBackground()
在另一個線程上運行。這段代碼錯了嗎?我應該添加同步嗎?像這樣:
class Task extends BlaBlaTask {
Model model;
Task(Model model) {
setModel(model);
}
// runs on a background thread
void doInBackground() {
// do smth with model, e.g.:
String id = getModel().id;
}
private synchronized void setModel(Model m) {
model = m;
}
private synchronized Model getModel() {
return model;
}
}
P.S.我正在研究Java 1.4,並且代碼可能可以在多核CPU上運行。
謝謝,我問這個問題被這個混淆:http://stackoverflow.com/questions/1919469/question-about-java-concurrency-in-practice-example –
請你看看我的另一個問題:http ://stackoverflow.com/questions/12934511/possible-concurrency-issue-in-xlet-development? –
你得到的答案已經很好。我把它提高了。 –