我有螺紋的煩惱有樂趣;)與線程
我做了一個腳本,我的階級如下:
class Test{
TextToSpeech mTts = new TextToSpeech();
boolean volatile mVarGlobal = false;
class T1 extends Thread{
public void run(){
doSomething(){
mVarGlobal = false;
// network working...Take a while
mTts.speak(...) //Speech information received from Network
mVarGlobal = true;
}
}
T1 t = new T1();
t.start();
class CheckVarGlobal extends Thread{
public void run(){
if(!mVarGlobal) {
text2Speech.speak("something");
}
postAtTime(this, 3000);
}
}
CheckVarGlobal c = new CheckVarGlobal();
c.start();
}
正如你可以看到我有2個線程運行,一個正在獲取網絡信息,另一個正在收到來自網絡的信息時正在運行。布爾變量mVarGlobal將爲true,然後檢查「CheckVarGlobal」的Thread將因條件(!mVarGlobal)爲false而停止。
的問題是,一旦我從網絡和語音信息的第一個線程的信息,第二個線程仍在運行和speeching「東西」。我想第二線程還沒有意識到CheckVarGlobal是真的......我已經把變量鍵入爲2個線程中使用的volatile。
任何想法,爲什麼會發生,以及如何解決呢?
非常感謝,
最好。 David。
我已經使用與可變mVarGlobal同步getter和setter也嘗試。但它仍然沒有工作:( – Dayerman 2011-02-23 12:07:40
爲什麼你沒有使用OnInitListener和OnUtteranceCompletedListener?你確定:mVarGlobal = true;被調用嗎? – pawelzieba 2011-02-23 12:40:42
使用TextToSpeech.OnUtteranceCompletedListener ??我爲什麼要? 我使用OnInitListender,但它是獨立的這部分的... – Dayerman 2011-02-23 13:01:18