Позвольте мне опубликовать некоторый код, прежде чем я задам вопрос.
public Object returnSomeResult() {
Object o = new Object();
Thread thread = new Thread(this);
thread.start();
return o;
}
public void run() {
// Modify o.
}
Итак, метод returnSomeResult
вызывается из потока пользовательского интерфейса; который запускает другой поток. Теперь мне нужно подождать, пока поток не закончит вычисления. И, между тем, я не хочу блокировать поток пользовательского интерфейса. Если я изменю код, как показано ниже; поток пользовательского интерфейса блокируется.
public Object returnSomeResult() {
Object o = new Object();
Thread thread = new Thread(this);
thread.start();
try {
synchronized(this) {
wait();
}
catch(Exception e) {
}
return o;
}
public void run() {
// Modify o.
try {
synchronized(this) {
notify();
}
catch(Exception e) {
}
}
Я уверен, потому что я использую synchronized(this)
, это вызывает блокировку потока пользовательского интерфейса. Как мне это сделать, не блокируя поток пользовательского интерфейса?