[英]How to access a method from another running thread in java
我是 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();
}
}
這里有一個簡單的線程教程
在實例化 ThreadB 對象時或之后,為其提供對 ThreadA 對象實例的引用。 類似的東西:
ThreadA a = new ThreadA();
ThreadB b = new ThreadB(a);
然后,在 ThreadB 代碼中,您可以使用毫無疑問存儲在 ThreadB 中的實例變量中的引用來調用 ThreadA 的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.