[问题] 使用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