public
class
classutil
for (entry> entry : map.entryset())
}public
static
boolean
emptyarr(object objects)
return
false;
}/**
* 處理乙個類,若不安全則將不安全的類以及對應字段加入map
* *@param cla
*@param map
*/private
static
void
dealoneclass(class<?> cla, map> map)
for (field field : fields)
break;}}
}}
/*** 處理乙個字段 若當前欄位不帶有註解 && 非final && 不是logger,則不安全
* *@param cla
*@param field
*@param map
*/private
static
void
dealonefield(class<?> cla, field field, map> map)
list.add(field.getname());}}
/*** 取得某個介面下所有實現這個介面的類
*/public
static list> getallclassbyinte***ce(class<?> c) }}
}}
return returnclasslist;}/*
* 取得某一類所在包的所有類名 不含迭代
*/public
static string getpackageallclassname(string classlocation, string packagename)
file packeagedir = new file(realclasslocation);
if (packeagedir.isdirectory())
return
null;
}/**
* 從包package中獲取所有的class
* *@param pack
*@return
*/public
static list> getclasses(string packagename) else
if ("jar".equals(protocol))
}} catch (ioexception e)
return classes;
}/**
* 從jar包中獲取所有class
* *@param packagename
*@param classes
*@param recursive
*@param url
*@throws ioexception
*/private
static
void
findandaddclassesinpackagebyjar(string packagename, list> classes, boolean recursive,
url url) throws ioexception
// 如果前半部分和定義的包名相同
if (name.startswith(packagedirname))
// 如果可以迭代下去 並且是乙個包
if ((idx != -1) || recursive) catch (classnotfoundexception e) }}
}}
}/**
* 以檔案的形式來獲取包下的所有class
* *@param packagename
*@param packagepath
*@param recursive
*@param classes
*/public
static
void
findandaddclassesinpackagebyfile(string packagename, string packagepath, final
boolean recursive,
list> classes)
// 如果存在 就獲取包下的所有檔案 包括目錄
file dirfiles = dir.listfiles(new filefilter()
});// 迴圈所有檔案
for (file file : dirfiles) else catch (classnotfoundexception e) }}
}}
Servlet執行緒的不安全
servlet是j2ee是一部分 也是j2ee規範中處理http請求的部件 為什麼說servlet中線程是不安全的呢?在servlet中對於同乙個servlet物件的多個請求,servlet的service方法將在乙個多執行緒的環境中併發執行,所以,web容器預設採用單例模式多執行緒的方式來處理ht...
hashMap的執行緒不安全
hashmap是非執行緒安全的,表現在兩種情況下 1 擴容 t1執行緒對map進行擴容,此時t2執行緒來讀取資料,原本要讀取位置為2的元素,擴容後此元素位置未必是2,則出現讀取錯誤資料。2 hash碰撞 兩個執行緒新增元素發生hash碰撞,都要將此元素新增到鍊錶的頭部,則會發生資料被覆蓋。詳情 ha...
執行緒不安全的解釋
乙個 arraylist 在新增乙個元素的時候,它可能會有兩步來完成 1.在 items size 的位置存放此元素 2.增大 size 的值。在單執行緒執行的情況下,如果 size 0,新增乙個元素後,此元素在位置 0,而且 size 1 而如果是在多執行緒情況下,比如有兩個執行緒,執行緒 a 先...