我正尝试使用多线程概念创建Java套接字程序。 从客户端到服务器的每一个连接都是一个线程。每个客户端都将他们的信息发送到服务器。从线程中收集值并将值保存到数组中java socket
我想问如何从线程中收集所有的值,并把它们全部放在字符串数组中?
是否需要同步所有这些线程?
如果只使用Thread t = new Thread()
而不是Thread[] t = new Thread(client)
,会有什么不同?
我是否正确使用Thread[]
来收集线程中的所有项目?
使用线程join()
有用吗?
这是创建线程的一部分,
public void listenSocket(int client){
int i=0;
Thread[] t = new Thread[client];
while(i<client){
ClientWorker w;
try{
w = new ClientWorker(server.accept());
t[i] = new Thread(w);
t[i].start();
System.out.println(t[i].getName());
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
i++;
}
}
这是线程什么做
class ClientWorker implements Runnable{
Socket client;
String ip;
String load;
String data[]=new String[7];
ClientWorker(Socket client){
this.client = client;
}
public void setIP(String ip){
this.ip = ip;
}
public void setData(String load){
this.load = load;
}
public void getIP(){
System.out.println(ip);
}
public void getData(){
System.out.println(load);
}
public void run(){
BufferedReader in = null;
PrintWriter out = null;
XmlGenerator xml = new XmlGenerator();
try{
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
} catch (IOException e) {
System.out.println("in or out failed");
}
while(true){
try{
String a = in.readLine();
setData(a);
String b = client.getRemoteSocketAddress().toString();
setIP(b);
out.println(a);
getData();
getIP();
}
catch (IOException e) {
System.out.println("Read failed");
}
}
}
}`
部分我读过关于同步,调用线程的话题,但我什么也没发现。 抱歉转发。
当你的代码片断显示,你只想实现一个'echo服务器',没有什么需要在这里同步。 – neevek 2012-08-14 01:49:55
@Neevek你能否详细说明一下?我无法理解。十分感谢。 – irvana 2012-08-14 01:55:01
当这些线程共享一些资源时(比如应用程序的状态,或者一个线程产生,另一个消耗的数据),您只需要同步线程。从你的代码我没有看到任何。 – neevek 2012-08-14 02:01:09