有2個線程:除了主UI線程外,還有線程1和線程2。如何確保同步時,一個線程不斷髮送數據到另一個線程?
UI線程產生Thread1。線程1 spwans線程2並不斷定期發送一個數組到線程2。
線程2應該繼續監聽線程1,並且只要它接收到數據,線程2就會處理它並將結果發送回UI線程。
這是如何實現的?我開始使用處理程序,但不知道如何將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();
}
}
你能顯示一些代碼嗎?我不知道爲什麼它不能從Thread1中檢索Thread2的處理程序? – Fildor 2014-11-25 14:50:45
沒有足夠的信息。什麼樣的數據?什麼樣的過程? – jhamon 2014-11-25 14:51:16
我添加了我的代碼 – user3282666 2014-11-25 15:05:57