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

时间:2014-09-25 19:44:11

标签: java multithreading

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

在线程中,我需要调用一个方法,但我需要从主线程调用它,不确定是否有任何方法可以执行此操作。

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

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

3 个答案:

答案 0 :(得分:0)

使用诸如布尔值之类的概念,然后让你的主线程&#34;注意改变&#34;:

&#34;这样做的好方法是让一个布尔变量保护Thread的run(),并在你想要停止它时从外部将它设置为true,例如:&#34; - 杰克

How to stop a java thread gracefully?

答案 1 :(得分:0)

可能的代码如下:

确保你

  • 使用“volatile”在线程之间运行时没有不良副作用
  • 使用ConcurentLinkedQueue添加您在并行线程中处理的任务

 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);
    }
}

答案 2 :(得分:-1)

如果你说要调用一个方法,那么这个新线程会从中产生。然后将该实例传递给要在其上调用方法的对象的新Runnable实现。没有办法可以直接主线程调用特定方法。

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