Java Threads를 처음 사용합니다. 내가 뭘 하려는지 ThreadB 개체에서 현재 실행중인 스레드 ThreadA 인스턴스에 액세스하고 setSomething라는 메서드를 호출하는 것입니다. 1) 실제보다 더 열심히 만들고 있다고 생각합니다. 2) null 포인터 예외가있어 해당 메서드에 액세스 할 때 잘못된 작업을 수행해야합니다.Java의 다른 실행중인 스레드에서 메소드에 액세스하는 방법
여기까지 내가 지금까지 가지고 있으며 내 기준을 이행했습니다. 근면 및 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**
}
}
사전에
정말 당신이 직접 액세스 할 수 있도록 ThreadB''_into_은'ThreadA' 개체를 전달할 방법이 없습니다. 클래스에서 반영 해킹을하는 것은 최적이 아닙니다. – Gray
그리고 "다른 응용 프로그램에 의해 시작되었습니다"라고 말할 때 다른 JVM을 의미하지는 않습니까? 다른 JVM에 있으면 RMI 또는 일부 다른 프로세스 간 통신을 사용해야 할 것입니다. 또는 파일이나 다른 것을 공유하십시오. – Gray
그레이의 두 번째 댓글이 받아 들여진 답변이어야합니다! –