多線程——講的不錯,認認真真做的筆記,認真再看!
阿新 • • 發佈:2017-11-04
es2017 文件 pan mode 體驗 效率 href blank 能夠
一、線程和進程
進程可以看成是一個運行中的程序,每個應用就是一個運行的程序,可以看成是一個進程。操作系統會為每個進程分配內存空間和CPU時間等。多任務支持了多進程。線程成為輕量級的進程,有自己的運行環境。線程存在於進程中,每個進程最少有一個線程,線程分享進程的資源。例如程序中同時進行數據讀取和數據處理,這樣能夠提高效率,這時候就需要兩個線程。二、java中的多線程實現的方式
java中提供了兩種實現線程的方式:- 通過繼承Thread類實現多線程
- 這個結果就是,main主線程開始,然後進行其他的線程,主線程結束,由於系統分配著進行時間,所以兩個線程穿插交替進行,可以運行一下體驗一下,如圖下面:
- 通過實現Runable接口實現多線程
經過實踐可以,跟上面那個結果類似
三、線程的名字
- 通過繼承Thread類實現多線程
- 通過實現Runable接口實現多線程
- 通過Thread對象的setName方法設置
- 調用getName方法得到線程的名字
- 例子6.3線程名字的使用
四、線程的優先級
- 默認情況下,一個程序的多個線程具有相同的優先級,也就是獲得CPU的概率相同。可以通過設置線程的優先級來調整每個線程獲得CPU的機會大小。
- 調用線程的setPriority方法設置優先級,參數表示優先級。優先級的最小值是1,最大的值是9,默認值是5。
- 需要設置優先級的情況比較少。
- 例子(6.4)線程的優先級
五、讓線程等待
根據需要可以讓線程等待一段時間再執行,可以通過4種方式:- 使用sleep讓線程等待一段時間
- 使用yield方法讓線程讓出執行機會
- 使用join讓線程等待
- wait方法與notity一起使用,在後面單獨介紹,這裏介紹3個
例子6.8——輸出結果0
例子6.9——輸出結果5
六、實例:實現人能夠同時說話和開車
七、資源同步
多線程的問題...int tickets = getTicket(); (1)setTickets(tickets-1); (2)...假設A線程和B線程分別表示兩個售票窗口,可能的執行過程如下:A線程執行(1),B線程執行(1),A線程執行(2),B線程執行(2),資源同步可以使用關鍵詞synchronized,相當於對資源加鎖,加鎖之後其他代碼就不能訪問了,只有等當前代碼執行完之後並解鎖,其他的代碼才能訪問。synchronized可以用在對象上,也可以用在方法上,也可以用在一段代碼上。例子:6.11在對象上加鎖
6.12在方法上加鎖
八、wait和notify
某個線程在執行的過程中發現需要的資源不可用的時候,就需要等待,調用資源的wait方法,讓當前線程處於等待狀態。處於等待狀態的線程自己不能繼續執行,必須等待其它線程喚醒它,其他線程通過notify或者notifyAll方法來喚醒。Producer.java
這個項目Java文件已加載為附件附件列表
多線程——講的不錯,認認真真做的筆記,認真再看!