Мне нужно ваше мнение или альтернативное решение проблемы, которая у меня есть. У меня есть следующий код:Связь между двумя потоками
ThreadA создает ThreadB и дает B его интерфейс, поэтому ThreadB может использовать это. Когда ThreadB использует методы из интерфейса ThreadA, можно обработать результат. Является ли это правильным способом обработки связи? Если нет, то как это будет правильно?
public class ThreadA implements ThreadInterface {
public ThreadA() {
ThreadB b = new ThreadB((ThreadInterface) this);
b.start();
}
@Override
public void processFinished(int result) {
// Do something with the result
}
}
public interface ThreadInterface {
void processFinished(int result);
}
public class ThreadB extends Thread {
ThreadInterface ti;
public ThreadB(ThreadInterface pTi) {
ti = pTi;
}
@Override
public void run() {
int result = 0;
// ... do things and save them into result
ti.processFinished(result);
}
}
Что вы делаете, как сказал в своем ответе @TimB, это выполнение динамического (потому что оно определено во время выполнения) кода (метод 'processFinished') в ThreadB. Это не то же самое, что и код выполнения ('processFinished') в ThreadA. –
Есть ли что-нибудь, что можно сделать в ThreadA, а ThreadB - это все? Если нет, не используйте несколько потоков. – zapl
Передача 'this' в другой поток в конструкторе объекта является плохой практикой. Это позволяет другому потоку получить доступ к новому объекту в незастроенном состоянии. Google для «java утечки этого» для получения дополнительной информации. –