java中如何从另一个正在运行的线程访问方法

2023-12-30

我是 Java 线程的新手。我想做的是从 ThreadB 对象获取当前正在运行的线程 ThreadA 的实例的访问权限,并调用其名为 setSomething 的方法。 1)我认为我比实际情况更加努力 2)我有一个空指针异常,所以我在访问该方法时一定做错了什么

这是我到目前为止所得到的,我已经完成了尽职调查,并在 StackOverflow 上查找了类似的问题。

我有一个当前线程在后台运行:

// assume this thread is called by some other application
public class ThreadA implements Runnable{

  private Thread aThread;

  public ThreadA(){
    aThread = new Thread(this);
    aThread.setName("AThread");
    aThread.start();
  }


  @Override
  public void run(){
     while(true){
       // doing something
     }
  }

  public void setSomething(String status){
    // process something
  }

}

// assume this thread is started by another application
public class ThreadB implements Runnable{

@Override
public void run(){
  passAValue("New");
}

public void passAValue(String status){
   // What I am trying to do is to get the instance of ThreadA and call 
   // its method setSomething but I am probably making it harder on myself
   // not fully understanding threads

   Method[] methods = null;
   // get all current running threads and find the thread i want
   Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
   for(Thread t : threadSet){
     if(t.getName().equals("AThread")){
       methods = t.getClass().getMethods();
     }

   }

   //**How do I access ThreadA's method, setSomething**

}

}

先感谢您

Allen


哇,你为什么把事情搞得这么复杂?!这并不像你想象的那么难(在黑暗城堡里杀死一条龙!)

好吧,您所需要做的就是将 threadA 引用传递给 threadB!只是这个。让我说一下,当你从线程 b 调用一个方法时,它是由线程 b 运行的,而不是该类已被托管。

class ThreadA implements Runnable {
    public void run() {
        //do something
    }

    public void setSomething() { }
}

class ThreadB implements Runnable {
    private ThreadA aref;

    public ThreadB(ThreadA ref) { aref = ref; }

    public void run() {
        aref.setSomething(); // Calling setSomething() with this thread! (not thread a)
    }
}

class Foo {
    public static void main(String...arg) {
        ThreadA a = new ThreadA();
        new Thread(a).start();

        ThreadB b = new ThreadB(a);
        new Thread(b).start();
    }
}

and here http://arashmd.blogspot.com/2013/06/java-threading.html一个简单的线程教程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中如何从另一个正在运行的线程访问方法 的相关文章

随机推荐