執行緒(Thread)知識點概要

2021-10-11 03:11:36 字數 2100 閱讀 5504

*執行緒的一些主要方法:

1.thread.run():執行(執行緒任務)

2.thread.start():開啟執行緒

3.thread.stop():強制結束執行緒(執行緒消亡)

4.thread.sleep(time):凍結執行緒,執行緒依舊存活,時間到就解凍,接著執行執行緒

5.thread.wait():徹底凍結,沒有消亡還不能動,不過可以進行手動喚醒(notify()),被wait的執行緒會被儲存到執行緒池裡面。

6.thread.notify():喚醒執行緒

7.thread.notifyall():喚醒所有執行緒

8.thread.currentthread():獲取當前執行緒

9.thread.currentthread().getname():獲取當前執行緒的名字

執行緒的執行具有對cpu的執行資格和執行權,被凍結的執行緒執行資格和執行權被釋放;

執行狀態:具備執行資格和執行權。

臨時阻塞狀態:具備執行資格,不具備執行權,正在等待執行權。

凍結狀態:不具備執行資格和執行權。

喚醒狀態:具備執行資格,暫時還不具備執行權,須等待。

cpu的執行資格:可以被cpu處理,在處理佇列中排隊。

cpu的執行權:正在被cpu處理。

*建立執行緒的兩種方式:*同步函式與同步**塊都具有解決執行緒安全問題的功能

lock lock new reentrantlock();

void show()

finally

1、同步**塊:synchronized(object object),傳入的object物件稱為同步鎖且必須是全域性的。注意:「同步**塊的鎖」可以是任意的物件。

2、同步函式:使用synchronized修飾符修飾的方法,方法體內是需要同步執行的內容。注意:「同步函式鎖」是呼叫該方法的物件,也就是this指向的物件。

3、當同步**塊與同步函式一起使用的時候,為了保證執行緒的安全,兩者的同步鎖必須保持一致,共用this物件。建議使用同步**塊。

4、靜態同步函式的鎖是誰?:使用靜態修飾符修飾的物件沒有new的過程,因此也就沒有this物件,所以靜態同步函式的鎖肯定不是this,它的鎖是該函式所屬位元組碼檔案物件,可以通過getclass(非靜態的)方法獲取它的位元組碼檔案物件,也可以用當前 類名.class表示,當遇到第3點的情況,同步**塊可以通過獲取當前物件的位元組碼檔案物件來進行傳參,即this.getclass()或類名.class,確保「同步**塊鎖」與「靜態同步函式鎖」是同乙個物件,保證執行緒的安全。

5、死鎖:常見死鎖情況之一,同步巢狀。

6、執行緒間通訊:多個執行緒在處理同乙個資源,但是任務不同。

6.1、多生產者,多消費者容易產生的問題:if判斷標記,只有一次,會導致不該執行的執行緒執行了。出現了資料錯誤的情況。notify只能喚醒乙個執行緒,如果本方喚醒了本方,沒有意義。

解決方法:while判斷標記+notifyall。while判斷標記,解決了執行緒獲取執行權後,是否要執行。notifyall解決了本方執行緒一定會喚醒對方執行緒的問題,避免了所有執行緒都被凍結的從而導致死鎖的情況。注意:本方執行緒喚醒本方執行緒毫無意義,只有本方執行緒喚醒對方執行緒才有意義。while標記+notify會導致死鎖。但是while判斷標記+notifyall有乙個弊端,那就是降低了執行效率,因為notifyall既喚醒了對方,也喚醒了本方,那麼有什麼辦法既可以喚醒對方,又可以不用喚醒本方呢?當然可以,jdk1.5以後將同步和鎖封裝成了物件並將操作鎖的隱式方法定義到了該物件中,將隱式動作變成了顯示動作。使用方法如下:

}lock介面:替代了同步**塊或者同步函式。將同步的隱式鎖操作變成了顯示鎖操作,同時更為靈活。可以乙個鎖加上多組監視器。lock():獲取鎖。unlock():釋放鎖,通常需要定義在finally**塊中。

condition介面:替代了object中單獨進行了封裝,變成condition監視器物件,可以和任意鎖進行結合。await();signal();signalall();

7、wait和sleep的區別:

(1)、wait可以指定時間也可以不指定;sleep必須指定時間。

(2)、在同步中時,對cpu的執行權和鎖的處理不同。wait:釋放執行權,釋放鎖;sleep:釋放執行權,不釋放鎖。

Python 知識點概要

一 字串 引號裡面的元素,線性結構 不可變 1 陣列 四個位元組 unicode 字元編碼 對照表 2 97 a 67 a 3 ord 查詢字元數字編碼 例 print ord 一 會輸出19986 4 gbk gb2312 utf 8 可變長度的unicode,字母數字標點符合 二進位制字串 文字...

html知識點概要 一

一.html介紹 1.什麼是html html是用來描述網頁的一種語言,hyper text markup language即超文字標記語言,html不是一種程式語言,而是一種標記語言,標記語言是一套標記標籤,html使用標記來描述網頁。2.html的作用 web瀏覽器的作用是讀取html文件,並以...

html知識點概要 三

一.其他標籤 1.meta標籤 元素可提供有關頁面的元資訊 meta information 比如針對搜尋引擎和更新頻度的描述和關鍵字,位於文件的頭部,不包含任何內容,其屬性定義了與文件相關聯的名稱 值對 常用屬性 content 定義與http equiv或name屬性相關的元資訊 http eq...