你好,希望你们度过愉快的一天,我有接口在后台工作,在其中一个方法上,它读取一行字符串并调用实现类的方法,如下所示:
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能够回收这些吗?
答案 0 :(得分:0)
您想要按顺序或同步方式运行方法吗?如果它的同步所需的内存高出100万倍。但是在线程结束后,应该从你的片段中释放内存(否则你必须在线程上手动释放它们)。所以我认为它的内存安全"。
如果它的线程安全很难用较少的信息说 - 是否有从多个线程使用的任何对象/资源?这些objets线程安全吗?如果不是,你必须手动实现(catchword:mutex)。
最后但同样重要的是:您确定这是解决问题的唯一方法吗?一百万次调用一种方法似乎是不好的做法 - 可能有一些你可以使用的回调吗?