final Object omessage = request.getSession().getAttribute("messges");

Map<Integer, StringArray> messMap=null;
if(omessage==null){
messMap=Collections.synchronizedMap(new HashMap<Integer, StringArray>());
}else{
messMap= (Map<Integer, StringArray>) omessage;
}
try {
ss = new ServerSocket(port);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t = new Thread(new Runnable() {
DataInputStream in = null;
public void run() {
try {
while (true) {
s = ss.accept();
in = new DataInputStream(s.getInputStream());
String mess = in.readUTF();
if (mess != null && !mess.equals("")) {
String[] messs = mess.split("^^$say");
Integer id = Integer.parseInt(messs[0]);
StringArray iArray = messMap.get(id);
iArray.add(messs[1]);
messMap.put(id, iArray);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t.start();
}希望大家帮我看看,我说下问题,我要接受别人发过来的信息,然后用map 储存起来,放到session中去,线程中map要是flnal变量,但是map又不能是flnal ,各位大大有什么好的办法,在线等,谢谢了

解决方案 »

  1.   

    class AThread extends Thread{
        Map map;
        public AThread(Runnable target, Map map) {
        super(target);
        this.map=map;
        }
    }
      

  2.   

    可是我的情况,好像只有内部类访问比较轻松点,而且我还要操作session ,当然谢谢了,苦难依然在,我给改了一下,问题是解决了,可是request确成了常量
      

  3.   


    匿名内部类使用在其外部定义对象的时候 编译器会要求其参数引用必须是final的 而且我没感觉你这里必须使用匿名内部类 不是么?
      

  4.   

    Map<Integer, StringArray> messMap=null;
    ->
    final Map<Integer, StringArray> messMap;