Мне немного стыдно задавать этот основной вопрос, но вот оно.Java: вызов обратного вызова из другого потока, в контексте исходной темы
Предположим, у меня есть основной класс и рабочий поток. Рабочий поток выполняет некоторую асинхронную работу и возвращает результаты обратному вызову основного класса.
Теперь с чем я борюсь: обратный вызов основного класса выполняется как часть рабочего потока. Я сделал это дюжину раз, и это никогда не вызывало никаких проблем для меня, но мне интересно, как элегантно передать ответ от рабочего потока на фактический основной поток.
Я знаю, что могу использовать Future
и FutureTask
и т. Д., Но мне это кажется неуклюжим.
Пример:
class ThreadTest {
private Runnable mRunnable;
public ThreadTest() {
System.out.println("ThreadTest(): thread " + Thread.currentThread().getId());
mRunnable = new Runnable() {
public void run() {
System.out.println("run(): thread " + Thread.currentThread().getId());
print();
}
};
new Thread(mRunnable).start();
}
private void print() {
System.out.println("print(): thread " + Thread.currentThread().getId());
}
public static void main(String... args) {
System.out.println("main(): thread " + Thread.currentThread().getId());
ThreadTest t = new ThreadTest();
}
}
Выход:
main(): thread 1
ThreadTest(): thread 1
run(): thread 9
print(): thread 9
То, что я хотел бы получить:
main(): thread 1
ThreadTest(): thread 1
run(): thread 9
print(): thread 1
Вы совершенно правы, я был совсем рядом со своим компьютером в течение часа или двух ... – fjc
Не обращайте внимания; -.) – GhostCat