執行緒操作回傳值
在多執行緒程式設計中,執行緒之間的互動往往需要交換資料。常見的情況是嘗試檢索在單獨執行緒中執行的操作的結果。
請考慮下面的範例程式碼:
public void test() {
Thread uiThread = new HandlerThread("UIHandler") {
public synchronized void run() {
int value = 2; // To be returned to test()
}
};
uiThread.start();
}
在此實例中,值在單獨的執行緒(在本例中為「UIHandler」)內修改。挑戰在於將此值傳回給呼叫方方法,該方法需要檢索修改後的資料。
利用物件的狀態
解決此問題的一種方法是使用物件的狀態來儲存和檢索所需的資料。例如,您可以建立一個實作 Runnable 介面的自訂類,允許其作為執行緒執行。在這個類別中,你可以有一個欄位來儲存執行緒計算的值:
public class Foo implements Runnable {
private volatile int value;
@Override
public void run() {
value = 2;
}
public int getValue() {
return value;
}
}
透過此實現,您可以將執行緒建立和計算值的檢索分開。這是一個例子:
Foo foo = new Foo();
Thread thread = new Thread(foo);
thread.start();
thread.join();
int value = foo.getValue(); // Retrieve the modified value
關鍵注意事項
需要注意的是,執行緒本身並不會回傳值。透過像普通類別一樣引用線程並使用 getValue() 等方法請求其值,您可以彌補這一差距。此外,您應該確保同步機制以防止資料競爭條件並維護執行緒安全性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3