子线程到父线程通信

时间:2013-08-16 18:01:53

标签: java android multithreading

我正在研究Android上的java多线程应用程序。

线程1:监听器线程。 继续监听套接字,触发第二个线程进行某些操作

线程2:操作线程。 短暂的。从第一个线程中被解雇,做一个简单的动作并死掉。

线程1不会在线程2上等待,因为它会在激活线程2后返回侦听。

我可以在Thread2结束之前在Thread1中执行一个方法(比如thread2ActionCompleted())。

出于某种原因,我不能在Thread 1中使用静态方法或静态变量

我在使用ExecutorService时看到了一些类似的线程,但是如果它在我的情况下会起作用,就找不到一个好的例子。

4 个答案:

答案 0 :(得分:1)

看起来你的问题很简单,这里是伪代码。

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
}

干杯!!

答案 1 :(得分: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();
 ...
}

答案 2 :(得分:0)

这是实施observer pattern的潜在候选人。线程2能够在完成它的工作时通知所有观察者(特别是线程1)。

例如:

线程1实现了Observer。

线程2实现了Observable。

当线程2完成时,它会通知所有观察者它已完成。这将告诉线程1线程2已完成。

答案 3 :(得分:0)

您可能想要的是Future。基本上,thread2会将其结果放在一个与thread1共享的线程安全的持有者对象中。当thread1想知道thread2发生了什么时,它可以检查Future对象。

这可以使用ExecutorService来管理thread2的生命周期,submitting a CallableExecutorService