簡體   English   中英

子線程到父線程通信

[英]child thread to parent thread communication

我正在研究Android上的java多線程應用程序。

線程1:監聽器線程。 繼續監聽套接字,觸發第二個線程進行某些操作

線程2:動作線程。 短暫的。 從第一個線程開始,做一個簡單的動作並死掉。

線程1不會在線程2上等待,因為它在激活線程2后返回到偵聽。

我可以在它結束之前從Thread2執行Thread1中的方法(比如thread2ActionCompleted())。

由於某種原因,我不能在線程1中使用靜態方法或靜態變量

我在使用ExecutorService看到了一些類似的線程,但是如果它在我的情況下工作則找不到一個好的例子。

像你的問題很簡單,這里是偽代碼。

Thread1 {

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

  Method m1 {

  }
}

Thread1繼續運行,你可以根據你的條件啟動線程2。

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

干杯!!

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

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();
 ...
}

這是實現觀察者模式的潛在候選者。 線程2能夠在完成它的工作時通知它的所有觀察者(特別是線程1)。

例如:

線程1實現了Observer。

線程2實現了Observable。

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

您可能想要的是Future 基本上, thread2會將其結果放在一個與thread1共享的線程安全的holder對象中。 thread1想知道thread2發生了什么時,它可以檢查Future對象。

這可以使用ExecutorService來管理thread2的生命周期並將一個Callable提交ExecutorService

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM