Есть 2 потока: Thread1 и Thread2, в дополнение к основной резьбе пользовательского интерфейса.Как обеспечить синхронизацию, когда один поток продолжает отправлять данные в другой поток?
Поля UI порождают Thread1. Thread1 расширяет поток Thread2 и периодически отправляет массив в Thread2.
Thread2 должен продолжать слушать Thread1 и всякий раз, когда он получает данные, Thread2 будет обрабатывать его и отправлять результат обратно в поток пользовательского интерфейса.
Как это можно достичь? Я начал использовать обработчики, но не знал, как отправить обработчик Thread2 в Thread1, так что Thread1 может продолжать отправлять данные в очередь сообщений Thread2.
Это Резьба1:
public class Thread1 extends Thread {
Handler handler;
int a[] = {1,2,3,4,5,6,7,8,9,10};
@Override
public void run() {
Thread2 thread2 = new Thread2();
thread2.start();
handler = thread2.getHandler();
for(int i = 0; i < 5; i++){
thread2.passData(a);
handler.sendEmptyMessage(0);
try{
Thread.sleep(1000);
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
}
Это Резьба2:
public class Thread2 extends Thread {
private int a[];
Handler handler;
public void passData(int a[]) {
this.a = new int[10];
this.a = a.clone();
}
public Handler getHandler() {
return handler;
}
@Override
public void run() {
if(Looper.myLooper() == null) {
Looper.prepare();
}
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
for(int i = 0; i < a.length; i++) {
//random work
}
}
};
Looper.loop();
}
}
У вас есть код? Я не знаю, почему это должно быть ** невозможно получить из обработчика Thread2 из Thread1? – Fildor
не хватает информации. Какие данные? какой процесс? – jhamon
Я добавил свой код – user3282666