回覆列表
  • 1 # 使用者8164223632766

    狀態的解釋:有狀態就是有資料儲存功能。有狀態物件(Stateful Bean),就是有例項變數的物件,可以儲存資料,是非執行緒安全的。在不同方法呼叫間不保留任何狀態。 無狀態就是一次操作,不能儲存資料。無狀態物件(Stateless Bean),就是沒有例項變數的物件.不能儲存資料,是不變類,是執行緒安全的。 執行緒安全的解釋是:如果你的程式碼所在的程序中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。執行緒安全問題都是由全域性變數及靜態變數引起的。若每個執行緒中對全域性變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域性變數是執行緒安全的;若有多個執行緒同時執行寫操作,一般都需要考慮執行緒同步,否則就可能影響執行緒安全 比如一個 ArrayList 類,在新增一個元素的時候,它可能會有兩步來完成:

    1. 在 Items[Size] 的位置存放此元素;

    2. 增大 Size 的值。   在單執行緒執行的情況下,如果 Size = 0,新增一個元素後,此元素在位置 0,而且 Size=1;   而如果是在多執行緒情況下,比如有兩個執行緒,執行緒 A 先將元素存放在位置 0。但是此時 CPU 排程執行緒A暫停,執行緒 B 得到執行的機會。執行緒B也向此 ArrayList 新增元素,因為此時 Size 仍然等於 0 (注意哦,我們假設的是新增一個元素是要兩個步驟哦,而執行緒A僅僅完成了步驟1),所以執行緒B也將元素存放在位置0。然後執行緒A和執行緒B都繼續執行,都增加 Size 的值。   那好,現在我們來看看 ArrayList 的情況,元素實際上只有一個,存放在位置 0,而 Size 卻等於 2。這就是“執行緒不安全”了。 懂不懂 ?

  • 中秋節和大豐收的關聯?
  • 大過年的,親朋好友問起產品經理這個職業,要怎麼通俗解釋?