我正在研究Android上的java多线程应用程序。
线程1:监听器线程。 继续监听套接字,触发第二个线程进行某些操作
线程2:操作线程。 短暂的。从第一个线程中被解雇,做一个简单的动作并死掉。
线程1不会在线程2上等待,因为它会在激活线程2后返回侦听。
我可以在Thread2结束之前在Thread1中执行一个方法(比如thread2ActionCompleted())。
出于某种原因,我不能在Thread 1中使用静态方法或静态变量
我在使用ExecutorService
时看到了一些类似的线程,但是如果它在我的情况下会起作用,就找不到一个好的例子。
答案 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 Callable
到ExecutorService
。