我是 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(使用前将#替换为@)