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

标签 java multithreading

我是 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**

}

提前致谢

艾伦

最佳答案

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

好的,您需要做的就是将 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();
    }
}

here一个简单的线程教程

关于java - 如何从java中的另一个正在运行的线程访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19500517/

相关文章:

java - Hibernate:仅获取关联实体的列表

java - 计算算法的复杂度 - BigO

java - 运行 Android 模拟器时如何修复 GPU 驱动程序问题错误

java - Executorservice worker 没有在单独的线程中运行

.NET Process.Kill() 以安全的方式

java - 检查输入是否正确 java 类型

android - Android 中的动画和多线程

连接到 Redis 时永远不会终止的 Objective-C 控制台应用程序

c++ - 使用来自不同线程的 postthreadmessage()

java - 检查 Stack 元素和 char 的等价性