3

我正在开发 Android 上的 java 多线程应用程序。

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

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

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

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

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

我看到了一些类似的线程使用ExecutorService,但找不到一个很好的例子,如果它适用于我的情况。

4

4 回答 4

1

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

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
}

干杯!!

于 2013-08-16T18:09:52.693 回答
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();
 ...
}
于 2013-11-19T22:51:01.087 回答
0

这是实现观察者模式的潜在候选者。线程 2 将能够在完成工作时通知其所有观察者(特别是线程 1)。

例如:

线程 1 实现了观察者。

线程 2 实现了 Observable。

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

于 2013-08-16T18:05:15.547 回答
0

你可能想要的是一个Future. 基本上,thread2会将其结果放置在与thread1. 当thread1想知道它发生了什么时thread2,可以检查Future对象。

这可以使用 aExecutorService来管理 thread2 的生命周期并将a 提交CallableExecutorService.

于 2013-08-16T18:05:35.380 回答