作者baseball464 (你在看我吗)
看板java
标题[问题] 使用array制作Thread问题
时间Fri Jul 21 15:28:29 2017
各位先进们
小弟只是自学自己摸索的
如果有甚麽不懂的地方请不要鞭太大力
小弟的问题如下
现在在写一个东西
假设我有三个执行绪
然後我用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://webptt.com/cn.aspx?n=bbs/java/M.1500622113.A.ADB.html
※ 编辑: baseball464 (101.9.131.198), 07/21/2017 15:30:43
1F:→ ssccg: anonymous class里用到外面的local variable其实都是当下复 07/21 15:44
2F:→ ssccg: 制一份,所以必须是不会再改变的数值(effectively final) 07/21 15:45
3F:→ ssccg: i显然是会变的 07/21 15:46
4F:→ ssccg: 下面的我猜你以为 Thread_Array[i] = new Thread 结果是 07/21 15:48
我的确认为他是右边带入左边了-.-.....
※ 编辑: baseball464 (101.9.131.198), 07/21/2017 15:52:27
5F:→ ssccg: A_Thread = new Thread、B_Thread = new Thread ... 07/21 15:55
6F:→ ssccg: 但是Thread[] Thread_Array = {A,B,C,D} 其实是 07/21 15:56
7F:→ ssccg: 但是Thread[] Thread_Array = new Thread[4]; 07/21 15:56
8F:→ ssccg: Thread[0] = Thread_A; Thread[1] = Thread_B; ... 07/21 15:56
9F:→ ssccg: 後面的回圈只是换掉Thread_Array内容,跟你的ABCD变数无关 07/21 15:57