亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    多線程的三大特性是什么

    多線程的三大特性是什么

    多線程有三大特性,分別是:

    原子性、可見性、有序性

    1、什么是原子性

    即一個操作或者多個操作要么全部執(zhí)行并且執(zhí)行的過程不會被任何因素打斷,要么就都不執(zhí)行。

    一個很經(jīng)典的例子就是銀行賬戶轉賬問題:

    比如從賬戶A向賬戶B轉1000元,那么必然包括2個操作:從賬戶A減去1000元,往賬戶B加上1000元。這兩個操作必須要具備原子性才能保證不出現(xiàn)一些意外的問題。

    我們操作數(shù)據(jù)也是如此,比如i = i+1;其中就包括,讀取i的值,計算i,寫入i。這行代碼在Java中是不具備原子性的,則多線程運行肯定會出問題,所以也需要我們使用同步和lock這些東西來確保這個特性。

    (視頻教程推薦:java視頻)

    2、什么是可見性

    當多個線程訪問同一個變量時,一個線程修改了這個變量的值,其他線程能夠立即看到修改的值。

    若兩個線程在不同的cpu,那么線程1改變了i的值還沒刷新到主存,線程2又使用了i,那么這個i值肯定還是之前的,線程1對變量的修改線程2沒看到這就是可見性問題。

    3、什么是有序性

    程序執(zhí)行的順序按照代碼的先后順序執(zhí)行。

    一般來說處理器為了提高程序運行效率,可能會對輸入代碼進行優(yōu)化,它不保證程序中各個語句的執(zhí)行先后順序同代碼中的順序一致,但是它會保證程序最終執(zhí)行結果和代碼順序執(zhí)行的結果是一致的。如下:

    int a = 10; //語句1 int r = 2; //語句2 a = a + 3; //語句3 r = a*a; //語句4

    則因為重排序,他還可能執(zhí)行順序為 2-1-3-4,1-3-2-4,但絕不可能 2-1-4-3,因為這打破了依賴關系。

    顯然重排序對單線程運行是不會有任何問題,而多線程就不一定了,所以我們在多線程編程時就得考慮這個問題了。

    推薦教程:java入門

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號