我有一個看起來像這樣的方法:(我已經大大簡化的例子)在AsyncTask的doInBackground()方法中使用這些變量是否安全?
public void doSomething(final int num1, final int num2, final String str) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
reallyComplexStatisticFunction(num1 + num2, str);
}
}.execute();
}
是明智的做法是直接使用AsyncTask
的doInBackground()
內提供給doSomething()
參數方法?或者這會導致線程相關的問題?
此外,如果第三個參數是Context
實例而不是String
,它會有什麼區別嗎?
您只是傳遞/使用值。例如你沒有傳入'num1',但是它的值可以是1或2,或者是任何'int'。如果你傳遞了一些可變對象的引用,可能會有意義。 – 2013-03-22 23:05:30
Java中的所有內容都是按值傳遞的。因此,做這個事情的論點是不爭的。如果你從另一個線程調用doSomething,它的棧幀將包含另一組副本。即使是String對象也是通過值傳遞的 - 具體地說,是引用值的一個副本。 – Simon 2013-03-22 23:06:57