Как вызвать метод и объект как отдельный поток в Java? - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь вызвать метод в объекте класса с помощью отражения.Тем не менее, я хочу запустить его как отдельный поток.Может кто-нибудь сказать мне изменения, которые я должен сделать в файле model.java или ниже?

 thread = new Thread ((StatechartModel)model);
 Method method = model.getClass().getMethod("setVariable",newClass[]{char.class,t.getClass()});
 method.invoke(model,'t',t);

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Вы можете сделать что-то вроде следующего, который просто создает анонимный класс Runnable и запускает его в потоке.

final Method method = model.getClass().getMethod(
    "setVariable", newClass[] { char.class, t.getClass() });
Thread thread = new Thread(new Runnable() {
    public void run() {
         try {
             // NOTE: model and t need to defined final outside of the thread
             method.invoke(model, 't', t);
         } catch (Exception e) {
             // log or print exception here
         }
    }
});
thread.start();
0 голосов
/ 01 марта 2012

Позвольте мне предложить более простую версию, когда ваш целевой объект будет доступен как final:

final MyTarget finalTarget = target;

Thread t = new Thread(new Runnable() {
  public void run() {
    finalTarget.methodToRun(); // make sure you catch here all exceptions thrown by methodToRun(), if any
  }
});

t.start();
...