[問題] 使用array製作Thread問題

作者: baseball464 (你在看我嗎)   2017-07-21 15:28:29
各位先進們
小弟只是自學自己摸索的
如果有甚麼不懂的地方請不要鞭太大力
小弟的問題如下
現在在寫一個東西
假設我有三個執行緒
然後我用Array的方式去新增他
static void ListenForTCP (String name){
String Tcp_Data[][]={{"192.168.8.1","4000"},{"192.168.8.1","4001"},{"192.168.8.1","4002"},{"192.168.8.1","4003"}};
Thread Thread_Array[]={A_Thread,B_Thread,C_Thread,D_Thread };
Socket Socket_Array[]={A_Socket,B_ClientSocket,C_ClientSocket,D_ClientSocket};
for(int i=0 ;i<Thread_Array.length;i++){
int y=i;
Thread_Array[i]= new Thread(new Runnable() {
public void run() {
tpcipConnect(Socket_Array[y],Tcp_Data[y][0],Integer.valueOf(Tcp_Data[y][1]));
//請問一下為什麼這裡沒辦法直接帶入i
}
});
Thread_Array[i].start();
}
}
static void CheckThread (){
Thread CheckListenForConnext = new Thread(new Runnable() {
public void run() {
while(true){
try {
Thread.sleep(1000*10);
System.err.println("Do");
System.out.println(A_Thread.isAlive());
System.out.println(B_Thread.isAlive());
System.out.println(C_Thread.isAlive());
System.out.println(D_Thread.isAlive());
//在這裡要做判斷斷線重連
//但是會一直跳錯誤
//若把上面用array跑的執行緒
//拆成4個function就可以正常執行
//不知道是哪個環節有問題?!!!
} catch (InterruptedException e) {
}
}
}
});
CheckThread.start();
}
再麻煩各位前輩賜教-.-......
作者: ssccg (23)   2017-07-21 15:44:00
anonymous class裡用到外面的local variable其實都是當下複製一份,所以必須是不會再改變的數值(effectively final)i顯然是會變的下面的我猜你以為 Thread_Array[i] = new Thread 結果是A_Thread = new Thread、B_Thread = new Thread ...但是Thread[] Thread_Array = {A,B,C,D} 其實是但是Thread[] Thread_Array = new Thread[4];Thread[0] = Thread_A; Thread[1] = Thread_B; ...後面的迴圈只是換掉Thread_Array內容,跟你的ABCD變數無關

Links booklink

Contact Us: admin [ a t ] ucptt.com