當前位置:編程學習大全網 - 編程語言 - 北大青鳥Java培訓:線程安全分析?

北大青鳥Java培訓:線程安全分析?

在學習java編程語言的過程中,我們掌握了線程、線程池等相關的技術知識。

今天北京大學青鳥遼寧計算機學院就線程安全給大家做壹個簡單的講解和介紹。讓我們來看看。

線程安全是指多線程訪問時,采用壹種鎖定機制。當壹個線程訪問這個類的某個數據時,它是受保護的,其他線程不能訪問它,直到這個線程讀完它。

不會出現數據不壹致或者數據汙染的情況。

線程不安全是指不提供數據訪問保護,有可能多個線程相繼更改數據,造成臟數據。

何時考慮線程安全:壹個對象是否需要線程安全取決於該對象是否被多個線程訪問。

這裏指的是程序中訪問對象的方式,而不是對象要實現的功能。

為了使對象線程安全,應該采用同步機制來協調對對象可變狀態的訪問。

Java中常用的同步機制是Synchronized,它還包括volatile類型的變量、顯示鎖和原子變量。

在多線程中,當同時訪問同壹個類時,每次執行的結果與單線程相同,變量值與預期相同,所以這個類是線程安全的。

鎖的特性鎖機制的兩個特性:互斥:即同壹時間只允許壹個線程持有壹個對象的鎖,多線程中的協調機制就是通過這個特性實現的,這樣同壹時間只有壹個線程訪問需要同步的代碼塊(復合操作)。

互斥,我們經常稱之為操作的原子性。

可見性:您必須確保在釋放鎖之前對* * *共享變量所做的修改對於隨後獲得鎖的另壹個線程是可見的,否則,另壹個線程可能會繼續操作本地緩存的副本,從而導致不壹致。

掛起、休眠、阻塞和非阻塞掛起:當壹個線程掛起時,它會損失CPU使用時間,直到被其他線程(用戶線程或調試線程)喚醒。

休眠:也會失去CPU的使用時間,但是在規定的休眠時間後會自動激活,不需要喚醒(整個喚醒看似自動,實際上壹定有守護線程喚醒,不需要程序員手動幹預就行)。

阻塞:當線程正在執行時,無法獲得所需的資源,因此線程被掛起,直到滿足運行條件。

非阻塞:線程在執行時,得不到所需的資源,所以線程不被掛起等待,而是繼續執行其他事情。在滿足等待條件後,它會在執行前得到通知(守護線程也會這樣做)。

  • 上一篇:“人工智能”在大學裏是什麽學科或專業?
  • 下一篇:java ee數據庫問題
  • copyright 2024編程學習大全網