我想在多线程的类中定义一个LinkedList,然后把每一个链接都创建一个线程,把Socket收到的信息全部存进LinkedList,然后定义一个函数,取出数据,但是实际在运行中无法获取LinkedList中的数据
代码如下:import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.util.LinkedList;public class Connect extends Thread{
private Socket socket;
private static LinkedList DataList = new LinkedList();
private static Object lockObject = new Object();
public Connect(){
this.socket = null;
}
public Connect(Socket socket){
this.socket = socket;
}
public void run(){
byte[] buffer = new byte[4096];
System.out.println("客户端:"+socket.getInetAddress().toString());
try {
InputStream is = socket.getInputStream();
is.read(buffer);
synchronized(lockObject){
String Data = new String(buffer);
DataList.add(Data);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String GetMessage(){
synchronized(lockObject){
if (DataList.size() > 0)
{
//System.out.println(DataList.size());
String Buf = (String) DataList.getFirst();
DataList.removeFirst();
return Buf;
}
else 
return "";
}
}
}

解决方案 »

  1.   

    服务器端没有返回信息,你的list里还没有数据呗
      

  2.   

    我在DataList.add(Data);后面添加System.out.println(DataList.size());
    可以看出DataList是在添加节点,但是在mian()方法中新创建一个多线程类,但是不执行他,直接调用GetMessage()得到的DataList是一个空的
    代码如下
    Connect control = new Connect();
    while(true){
    if (control.GetMessage().length() >0)
    System.out.println(control.GetMessage());
    }
      

  3.   

    何解?我这个是继承了Thread的一个多线程类啊
      

  4.   

    问题解决了,我将DataList定义在main类中,然后每个线程都是一个引用就可以了,多谢以上给位了
      

  5.   

    那估计 LinkedList 里面还没有数据。多打一点日志出来,看一下收否接收到数据。