利用java檢測專案中線程不安全的類

2021-08-22 08:53:50 字數 2384 閱讀 4253

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 先...