首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

线程有关问题,不是太明白,帮忙看上程序

2012-08-25 
线程问题,不是太明白,帮忙看下程序Java codeclass ... {...static id static HashMapString, String

线程问题,不是太明白,帮忙看下程序

Java code
class ... {    ...    static id = "";    static HashMap<String, String> map = new HashMap<String, String>();    Object obj = new Object();    //先执行    //此方法为本系统客户端的请求    public String getResult() {        //id的值通过webservice从外部系统获取        id = xxx.getId();        String data = "";        int time = 0;        synchronized (obj) {            while (time++ < 6) { //等待30秒,也就是等map里有值                try {                    obj.wait(5 * 1000);  //每5秒查看一次data是否有值                    data = map.get(id);                    if(data != null && data != "") //若data有值则退出,方法返回                        break;                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }        return data;    }    //后执行    //此方法为外部系统通过webservie发布数据过来    public Element receiveData(String data) {        map.put(id, data);        return null;    }}


就是webservice请求异步应答
程序的大体意思就是这样了
但问题是
getResult方法可以获得id值
而receiveData方法中id为空

什么原因啊,线程同步不是太明白,要怎么做才正确呢,请大家帮忙。。。。

[解决办法]
1、有很多线程安全问题,receiveData中操作HashMap没有同步:http://www.ticmy.com/?p=97

2、使用了wait,却在条件满足时(即Map中有数据时)没有notify:http://www.ticmy.com/?p=219

3、与其使用wait-notify机制,你这里用sleep更简单
[解决办法]
建议使用Thread.sleep(),wait要notify,receiveData方法没有同步,HashMap是线程不安全的类

热点排行