Java 如何从主线程上的线程调用方法?

Java 如何从主线程上的线程调用方法?,java,multithreading,Java,Multithreading,我有一个正在运行的线程,它连接到web服务器,代码位于不同的线程上,因为我不希望每次调用代码时程序都停止 在线程中,我需要调用一个方法,但我需要从主线程调用它,不确定是否有任何方法可以做到这一点 如果我不是很清楚(我很确定我不是xD),那么下面是一些伪代码: thread.start(){ <do webcall stuff> <call method from main thread> } thread.start(){ } 使用布尔值之类的概念,然后

我有一个正在运行的线程,它连接到web服务器,代码位于不同的线程上,因为我不希望每次调用代码时程序都停止

在线程中,我需要调用一个方法,但我需要从主线程调用它,不确定是否有任何方法可以做到这一点

如果我不是很清楚(我很确定我不是xD),那么下面是一些伪代码:

thread.start(){
    <do webcall stuff>
    <call method from main thread>
}
thread.start(){
}

使用布尔值之类的概念,然后让主线程“注意变化”:

最好的方法是让线程的run()由一个布尔变量保护,并在需要停止时从外部将其设置为true,例如:“-JACK”


如果你说你想调用一个方法,这个新线程就是从这个方法中产生的。然后将该实例传递给要调用该方法的对象的新可运行实现。您无法指示主线程应该调用特定的方法


您可以从该线程生成新线程并调用所需的方法。

可能的代码如下:

确保你

  • 使用“volatile”不会对线程之间的运行产生不良的副作用
  • 使用ConcurentLinkedQueue,在其中添加在并行线程中处理的任务

公共类程序{
volatile静态ConcurrentLinkedQueue _items=new ConcurrentLinkedQueue();
公共静态void main(字符串[]args)引发InterruptedException{
线程thr=新线程(()->{
System.out.println(“调用的Web服务”);
_items.add(newmydata());});
布尔退出=假;
当(!退出){
而(!\u items.isEmpty()){
MyData项=_items.poll();
//对你的数据做点什么
}
睡眠(200);
}
}

在对象上调用方法,而不是在线程上。如果需要从另一个线程中调用某个方法,事情会变得棘手。问题的背景信息是什么,上下文是什么?如果绝对需要此功能,我想您可以创建某种类型的事件队列,可能是接受Runnables或Callabl的事件队列,然后从所需线程遍历队列。使用中断(并定期检查)比使用自己的中断要好。@user949300我有一个疑问。如何中断()子线程的主线程。我应该将线程对象引用传递给我的子线程,还是有更好的方法?哦,你可以。线程可以使用wait()和notify()或通过调整中断来相互交互,但是你被阻塞在一个线程上,这是不可取的。
 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);
    }
}