我正在做一个并发服务器程序,并且正在对其进行测试。在JUnit测试中,我输入以下内容:
[...]
Client[] clients = new Client[30];
for ( int i = 0; i<30 ; i++){
clients[i] = new Client("localhost", SERVPORT);
}
for ( Integer i = 0; i<30 ; i++){
new Thread(){
public void run(){
clients[i].send(i.toString()); <--
}
}.start();
}
[...]
问题是Java无法编译,因为我无法在用不同方法定义的内部类中引用非最终变量i,因此我必须将i修改并写为final(但我不应该这样)。我理解这一点,但是...如何同时从所有客户端发送消息?
附加信息:在方法中send(String)
,我向服务器发送一条消息,然后等待服务器响应。
您可以在原始for
循环内运行线程,而可以i
通过引用局部变量来跳过对索引变量的使用:
final Client[] clients = new Client[30];
for (int i = 0; i < 30; i++) {
final Integer integer = new Integer(i);
final Client client = new Client("localhost", SERVPORT);
clients[i] = client;
new Thread(){
public void run(){
client.send(integer.toString());
}
}.start();
}
请注意final
为每个循环创建的整数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句