是调用新的Runnable,还是为内存管理调用新类安全?

时间:2015-02-11 12:08:35

标签: android

你好,希望你们度过愉快的一天,我有接口在后台工作,在其中一个方法上,它读取一行字符串并调用实现类的方法,如下所示:

     while ( (receivedString = bufferedReader.readLine()) != null &&  
                       activity != null) {
                    activity.OnFileRowRead(receivedString, stmt, count);
                    count++;

                  }

并且它被调用了100万次,该方法当前返回一个布尔值,因此它是线程安全的,但这种方式明显较慢。方法是这样的:

 if(row != null && row.contains("/.~n/")){
                String [] splitted = row.split("\\/.~n/");

                for (String str : splitted){
                    String[] spl = str.split("\\/.nn/");

                    if(spl.length == 8){

                          int version = Integer.valueOf(NotNull(spl[7]));
                          stmt.bindLong(1, Integer.valueOf(NotNull(spl[0])));
                          stmt.bindLong(2, version);
                          stmt.bindString(3, NotNull(spl[3]));
                          stmt.bindDouble(4, Double.valueOf(NotNull(spl[1])));
                          stmt.bindDouble(5, Double.valueOf(NotNull(spl[2])));
                          stmt.bindString(6, NotNull(spl[4]));
                          stmt.bindString(7, NotNull(spl[5]));
                          stmt.bindString(8, NotNull(spl[6]));
                          stmt.bindString(9, version == 0 ? MapActivity_Database.STATUS_UNAVAILABLE : MapActivity_Database.STATUS_AVAILABLE);
                          stmt.execute();

                          str = null;

                          stmt.clearBindings();

                        count ++;
                    }
                   }
                  splitted = null;
                  }

            return true;
        } 

现在我认为实现这个的类的方法,创建一个新类并返回布尔值或运行一个新的runnable,并返回值,方法很快,你可以看到,但是100万还是太多了,内存和线程是否安全?我的意思是gc能够回收这些吗?

1 个答案:

答案 0 :(得分:0)

您想要按顺序或同步方式运行方法吗?如果它的同步所需的内存高出100万倍。但是在线程结束后,应该从你的片段中释放内存(否则你必须在线程上手动释放它们)。所以我认为它的内存安全"。

如果它的线程安全很难用较少的信息说 - 是否有从多个线程使用的任何对象/资源?这些objets线程安全吗?如果不是,你必须手动实现(catchword:mutex)。

最后但同样重要的是:您确定这是解决问题的唯一方法吗?一百万次调用一种方法似乎是不好的做法 - 可能有一些你可以使用的回调吗?