2013-08-16 88 views
3

我正在研究Android上的java多線程應用程序。子線程到父線程通信

線程1:監聽線程。 不斷監聽插座,觸發第二個線程的某些動作

線程2:動作線程。 短命。從第一個線程被解僱,做一個簡單的行動並死亡。

線程1不等待線程2,因爲它可以追溯到燒製主題聽完2.

我可以在線程1執行的方法(比如thread2ActionCompleted())從線程2它結束之前。

出於某種原因,我不能在線程1

使用靜態方法或靜態變量,我看到用ExecutorService一些類似的主題,也沒有找到一個很好的例子,如果它會在我的情況下工作。

+0

請使用您提問的語言編輯您的問題和相關標籤。 – Justin

+0

只需將對Thread1的引用傳遞給Thread2即可。 –

+0

不,你正在使用'Android'。僅供參考,您應該編輯標籤而不是評論。 OP期望更新該問題並提供更多的信息,而不是將其放在評論中。 –

回答

0

你的問題很簡單,這裏是僞代碼。

Thread1 { 

run() { 
    //check condition 
    //If condition meets create Thread Thread2 
    //set parent in Thread2 
    //start Thread2 
} 

    Method m1 { 

    } 
} 

線程1繼續運行,您可以根據您的條件啓動線程2。

Thread2 { 
    Thread1 parent; 
    //When done call parent.m1 
} 

乾杯!

+0

我想知道thread2在thread1中完成並在thread1中調用一些後處理方法。 – ajitk

+0

@ajitk - 請參閱編輯添加更多內容。 –

+0

如何從thread1傳遞flagDone。我不想讓thread1繼續檢查thread2是否完成。一旦完成,thread2應該在thread1中調用後處理方法。 – ajitk

0

這是實施observer pattern的潛在候選人。當線程2完成它的工作時,它將能夠通知它的所有觀察者(特別是線程1)。

例如:

線程1實現觀察者。

線程2實現Observable。

線程2完成後,它會通知所有觀察者已完成。這將告訴線程1線程2已完成。

+0

聽起來不錯。你有什麼例子嗎? – ajitk

+0

我鼓勵你看看維基百科提供的示例。這是一種相對直接的模式實現。 – Surveon

+0

Observable不是一個接口。因此,這對我來說不起作用。 (這是我得到的錯誤:類型Observable不能是Thread1.java的超級接口;超級接口必須是接口)。 這基本上意味着一個線程不能被觀察。它可以是觀察者。 – ajitk

0

你可能想要的是一個Future。基本上,thread2將其結果放置爲一個線程安全的持有者對象,與thread1共享。當thread1想知道thread2發生了什麼時,它可以檢查Future對象。

這可以通過使用ExecutorService來管理thread2的生命週期和submitting a CallableExecutorService來完成。

+0

聽起來不錯。我將探索這個選項,並會讓你知道它是否適用於我。 – ajitk

1

只是更新: 我最終將父線程實例作爲參數傳遞給子線程的構造函數。像一個魅力和任何代碼,我一次只能訪問一次,我把同步塊。

Parent Thread: Thread1 
Child Thread: Thread2 

class Thread1 extends Thread implements Runnable { 
    ... 
    Thread2 t2 = new Thread2(this); 
    new Thread(t2, "ChildThread").start(); 
    ... 
} 

class Thread2 extends Thread implements Runnable { 
... 
Thread1 t1; 
Thread2 (Thread1 t) { 
    t1 = t; 
} 
... 
t1.CallAnyMethod(); 
... 
}