我有一个正在运行的线程,它连接到一个web服务器,代码位于另一个线程上,因为我不希望程序每次调用代码时都停止。如何从主线程上的线程调用方法?
虽然在线程中,我需要调用一个方法,但我需要从主线程调用它,不知道是否有任何方法可以做到这一点。
如果我不是很清楚(我敢肯定我是不是XD),然后这里是一些伪代码:
thread.start(){
<do webcall stuff>
<call method from main thread>
}
我有一个正在运行的线程,它连接到一个web服务器,代码位于另一个线程上,因为我不希望程序每次调用代码时都停止。如何从主线程上的线程调用方法?
虽然在线程中,我需要调用一个方法,但我需要从主线程调用它,不知道是否有任何方法可以做到这一点。
如果我不是很清楚(我敢肯定我是不是XD),然后这里是一些伪代码:
thread.start(){
<do webcall stuff>
<call method from main thread>
}
使用的概念,如布尔值,然后让你的主线程“注意变化”:
“这样做的好方法是让线程的run()由布尔变量保护,并在您想停止它时从外部将其设置为true,例如:“ - JACK
使用中断(并定期检查它)比自己滚动更受欢迎。 – user949300 2014-09-25 19:49:10
@ user949300我有1个疑问。你如何中断()一个主线程从一个子线程。我应该将线程的对象引用传递给我的子线程还是有更好的方法? – 2014-09-25 19:59:07
如果你说你想调用一个方法从这个新线程产生出来。然后将该实例传递给要在其上调用方法的对象的新Runnable实现。没有办法,你可以直接主线程应该调用特定的方法。
你可以产生新的线程,并从该线程调用你需要的方法。
哦,你可以.Threads可以使用wait()和notify()或通过调用中断来相互交互 – 2014-09-25 20:03:33
但是然后你被阻塞在一个不希望的线程。 – 2014-09-25 20:12:47
可能的代码可以是以下几点:
确保您
public class Program {
volatile static ConcurrentLinkedQueue<MyData> _items = new ConcurrentLinkedQueue<MyData>();
public static void main(String[] args) throws InterruptedException {
Thread thr = new Thread(()->{
System.out.println("Web service called");
_items.add(new MyData()); });
boolean exit = false;
while(!exit) {
while (!_items.isEmpty()) {
MyData item = _items.poll();
//do something with your data
}
Thread.sleep(200);
}
}
您在对象上调用方法,而不是在线程上调用方法。如果你需要从另一个线程中调用某些东西,事情会变得棘手。什么是你的问题的背景资料,背景?如果这个功能是绝对需要的,我想你可以创建一个某种类型的事件队列,可能是接受Runnables或Callables的事件队列,然后从所需的线程遍历队列。 – 2014-09-25 19:46:48