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

看板java作者 (你在看我嗎)時間7年前 (2017/07/21 15:28), 7年前編輯推噓0(009)
留言9則, 1人參與, 最新討論串1/1
各位先進們 小弟只是自學自己摸索的 如果有甚麼不懂的地方請不要鞭太大力 小弟的問題如下 現在在寫一個東西 假設我有三個執行緒 然後我用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(); } 再麻煩各位前輩賜教-.-...... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.9.131.198 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1500622113.A.ADB.html ※ 編輯: baseball464 (101.9.131.198), 07/21/2017 15:30:43

07/21 15:44, , 1F
anonymous class裡用到外面的local variable其實都是當下複
07/21 15:44, 1F

07/21 15:45, , 2F
製一份,所以必須是不會再改變的數值(effectively final)
07/21 15:45, 2F

07/21 15:46, , 3F
i顯然是會變的
07/21 15:46, 3F

07/21 15:48, , 4F
下面的我猜你以為 Thread_Array[i] = new Thread 結果是
07/21 15:48, 4F
我的確認為他是右邊帶入左邊了-.-..... ※ 編輯: baseball464 (101.9.131.198), 07/21/2017 15:52:27

07/21 15:55, , 5F
A_Thread = new Thread、B_Thread = new Thread ...
07/21 15:55, 5F

07/21 15:56, , 6F
但是Thread[] Thread_Array = {A,B,C,D} 其實是
07/21 15:56, 6F

07/21 15:56, , 7F
但是Thread[] Thread_Array = new Thread[4];
07/21 15:56, 7F

07/21 15:56, , 8F
Thread[0] = Thread_A; Thread[1] = Thread_B; ...
07/21 15:56, 8F

07/21 15:57, , 9F
後面的迴圈只是換掉Thread_Array內容,跟你的ABCD變數無關
07/21 15:57, 9F
文章代碼(AID): #1PSQqXhR (java)
文章代碼(AID): #1PSQqXhR (java)