在同步方法/函数中比较两个HashMap面临的问题

时间:2012-08-06 10:44:11

标签: java multithreading hashmap

static protected HashMap<String, String> secMapMulti = new HashMap<String, String>();
static protected HashMap<String, String> baMapMulti = new HashMap<String, String>();
static protected HashMap<String,PrintWriter> writeAndClientId = new HashMap<String,PrintWriter>();
static String client_id = "";
static PrintWriter pw_eq=null;
static String[] split_str_data;
static int data_length;

public static synchronized void serveAllWriters(String data) {
    split_str_data = data.split(",");
    data_length = data.indexOf('|');


    for (Map.Entry<String, PrintWriter> entry : writeAndClientId.entrySet()) {
        pw_eq = entry.getValue();
        client_id = entry.getKey();

        if (baMapMulti.containsKey(nse_eq_client_id + ":" + split_str_data[0])) {
            pw_eq.println(data);
        } else {
            if (secMapMulti.containsKey(client_id + "-" + split_str_data[0])) {
                data = data.substring(0, data_length + 1);
                pw_eq.println(data);
            }
        }
    }
}

有时两个HashMap都会被比较,有时只会比较hashmap的第一个值,发生一些奇怪的事情。两个Hashmap包含需要根据特定条件进行比较的值。

2 个答案:

答案 0 :(得分:0)

问题描述不是很清楚?如果一个条件为真,你有if else分支语句它不会查看else块中的代码。那是你的问题吗?

在使用if-else

的同时,两种地图都不会被同时进行比较

答案 1 :(得分:0)

嘿,你的建议只是那个。如果键是baMapMulti,或者键位于secMapMulti中,则要么打印数据。如果在两个地图中都找不到钥匙,则“数据”将打印在查找键中的任何一个中,或者根本不打印。但是数据永远不会从hashmap查找中打印出来。但我不确定我是否回答了问题,因为问题并不是很清楚。请编辑问题以获得正确答案。一个不起眼的意见是,用更清晰的方式命名你的地图(ba和sec对我来说没有任何意义)。欢呼。