方式1:繼承Java.lang.Thread類,並覆蓋run()方法。優勢:編寫簡單;劣勢:單繼承的限制----無法繼承其它父類,同時不能實現資源共享。方式2:實現Java.lang.Runnable介面,並實現run()方法。優勢:可繼承其它類,多執行緒可共享同一個Thread物件;劣勢:程式設計方式稍微複雜,如需訪問當前執行緒,需呼叫Thread.currentThread()方法。
方式1:繼承Java.lang.Thread類,並覆蓋run()方法。優勢:編寫簡單;劣勢:單繼承的限制----無法繼承其它父類,同時不能實現資源共享。方式2:實現Java.lang.Runnable介面,並實現run()方法。優勢:可繼承其它類,多執行緒可共享同一個Thread物件;劣勢:程式設計方式稍微複雜,如需訪問當前執行緒,需呼叫Thread.currentThread()方法。
使用ThreadLocal,ThreadLocal會為每一個執行緒提供一個獨立的變數副本,這樣在多執行緒對資料訪問就不會出現衝突。因為每一個執行緒都擁有自己的變數副本,因此也就不需要同步該變數。ThreadLocal提供了執行緒安全的共享物件,在編寫多執行緒程式碼時,可以把不安全的變數封裝進ThreadLocal。
如果時web應用,可以使用Spring Bean的作用域中的request,在controller類前面加上@Scope(****),表明每次請求都會生成一個新的Bean物件。這樣也能起到執行緒安全的作用。
使用執行緒同步,關鍵字synchronized,當執行緒較多時,當一個執行緒呼叫該方法時,其他想要呼叫此方法的執行緒就要block ,多執行緒併發量大的時候會對效能有一定的影響。
1、執行緒(英語:thread)是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。在UnixSystemV及SunOS中也被稱為輕量程序(lightweightprocesses),但輕量程序更多指核心執行緒(kernelthread),而把使用者執行緒(userthread)稱為執行緒。
2、一般一個核心對應了一個執行緒,而intel開發出了超執行緒技術,1個核心能夠做到2個執行緒計算,而6個核心則能夠做到12個執行緒,超執行緒技術的好處就是無需增加物理核心就可以明顯的進步CPU多執行緒功能,畢竟增加物理核心是需要佔據非常大的核心面積,成本也隨之增加。而執行緒數是一種邏輯的概念,說白了就是虛擬出的CPU核心數,現在無論是intel還是AMD都具備超執行緒技術。