Я унаследовал этот код от предыдущего разработчика (lol). Я планирую изменить это, чтобы поддерживать соединение, вместо того, чтобы использовать обратный вызов слушателя.Singleton with Listener versus Join
Мои требования: 1. Мне нужно, чтобы вызывающий поток дождался завершения потока класса DoMath. 2. Мне нужно, чтобы другие потоки не вызывали его.
Это, в другом потоке (и класс) -:
DoMath.getInstance().performMathCalc();
Это не ждать или сна, конечно, когда он называет это:
public class DoMath {
protected math calc() {
}
public static DoMath getInstance() {
if(_instance == null) {
_instance = new DoMath();
}
return _instance;
}
// perform a synchronous math calc, and return a boolean indicating success or failure.
public boolean performMathCalc() {
MathEngine.setApplicationMode(MathEngine.AUTO);
MathEngine.getInstance().StartMathCalc(MathEngine.DIVISION);
return true;
}
// perform an async math calc, and call back the listener when done
public void performMathCalc(final listener client) {
Thread mathThread = new Thread(new Runnable() {
public void run() {
boolean result = performMathCalc();
client.mathFinished(result);
}
});
mathThread.setDaemon(true);
mathThread.start();
}
public static interface listener {
public void mathFinished(boolean success);
}
protected static DoMath _instance;
}
Таким образом, это лучше всего использовать слушателя или реализовать соединение в вызывающем классе?
не ждите, не спящий, не присоединяйте и не блокируйте основную нить. Когда-либо. – njzk2
@ njzk2 Хороший совет, если вы измените «когда-либо» на «при выполнении операции, рекламируемой как * асинхронная *» (что в данном случае обязательно применяется). –
Также обратите внимание, что код aysnc имеет, вероятно, ошибку. Слушатель не будет возвращен в поток, который вызывается executeMathCalc, но вместо этого в фоновом потоке. – cyngus