線程


多線程
進程: OS中併發的一個任務
併發原理:CPU分時間片,多任務交替執行;宏觀並行,微觀串行

線程: 在一個進程中,併發的一個順序執行流程
線程的三要素:
1. CPU : 由OS負責調度
2. Data: 堆空間共享,棧空間獨立
3. Code:  

實現線程的兩種方式
(1) 繼承Thread類,覆蓋run方法. 直接創建線程對象
(2) 實現Runnable接口,實現run方法.先創建Runnable對象,再創建線程對象
線程對象代表了底層的線程,創建線程對象後,調用start方法,會啓動對應的線程


線程同步:

多線程併發訪問同一個對象(臨界資源),如果破壞了不可分割的操作(原子操作),就會發生數據不一致的問題

在Java中,每個對象都有一個互斥鎖標記,用來分配給線程

synchronized(o){}  對o加鎖的同步代碼塊
只有拿到o對象鎖標記的線程,才能進入對o加鎖的同步代碼塊;當線程離開對o加鎖的同步代碼塊時,會釋放o的鎖標記

synchronized 方法的修飾符  同步方法  對this加鎖的同步代碼塊
只有拿到o對象鎖標記的線程,才能調用o的同步方法;當方法調用返回時,線程會釋放o的鎖
標記


線程間通信:
等待-通知
o.wait(): 必須放在對o加鎖的同步代碼塊中. 線程會釋放其所擁有的所有鎖標記,進入o的等待隊列
o.notify()/notifyAll():必須放在對o加鎖的同步代碼塊中,線程會從o的等待隊列中釋放一個/全部線程
sleep() : 來自Thread類  失去CPU,不會釋放鎖
wait()
  : 來自Object類  失去CPU,會釋放鎖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章