大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java培訓 Java線程培訓:Java線程內容詳解

Java線程培訓:Java線程內容詳解

更新時間:2020-08-07 16:02:48 來源:動力節點 瀏覽2366次

一:概念

了解線程,得先了解進程。

進程:是具有一定獨立功能的程序關于某個數據集合的一次運行活動,它是系統進行資源分配和調度的一個獨立單位。

線程:是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。

關系:簡而言之,一個程序至少有一個進程,一個進程至少有一個線程。進程和線程的主要差別在于他們是不同的操作系統資源管理方式。

二.創建線程

2.1:設計一個繼承java.lang.Thread的子類,覆蓋Thread類的run方法。

2.2:設計一個實現Runnable接口的類,實現它的run方法。

啟動線程:調用start()方法

運行線程:調用run()方法

三:線程之間的狀態

3.1:創建狀態:使用new運算符創建一個線程后,該線程處于創建狀態。

3.2:就緒狀態:用start()方法啟動一個線程后,系統為該線程分配除處理機外的所有資源,線程就進入就緒隊列排隊,等待處理機制調度。

3.3:運行狀態:輪到線程占用CPU資源時,JVM將CPU使用權切換給該線程,該線程就可以開始自己的生命周期。

3.4:阻塞狀態:正在運行的線程讓出CPU使用權,JVM將CPU資源切換給其它線程。阻塞主要有休眠阻塞、等待阻塞、互斥阻塞和其它阻塞等。

3.5:死亡狀態:線程運行結束后進入死亡狀態。

四:線程的兩個特性

多個線程之間是不能直接傳遞數據交互的,它們之間的交互只能通過共享變量來實現。

線程共享變量的過程:在多個線程之間共享了Count類的一個對象,這個對象是被創建在主內存(堆內存)中,每個線程都有自己的工作內存(線程棧)。操作共享對象時,首先從主內存復制Count對象到工作內存中,修改Count對象,最后用工作內存Count刷新主內存Count。

4.1:可見性

當一個對象在工作內存中都存在副本,一但一個線程修改了共享變量,其他線程能看見修改后的值。

4.2:有效性

多個線程執行時,CPU的調度是隨機的。保證線程有序的執行,這就是有效性。

五:線程的同步機制

5.1:synchronized

每個鎖對象都有兩個隊列,分別為就緒隊列,阻塞隊列。

就緒隊列存放了將要獲得鎖的線程,阻塞隊列存放了被阻塞的線程,當一個線程被喚醒后,才會進入就緒隊列,等待CPU的調度,反之,進入阻塞隊列,等待被喚醒。

一個線程執行互斥代碼過程如下:

1.獲得同步鎖;

2.清空工作內存;

3.從主內存拷貝對象副本到工作內存;

4.執行代碼(計算或者輸出等);

5.刷新主內存數據;

6.釋放同步鎖。

5.2:volatile

一個變量可以被volatile修飾,在這種情況下內存模型(主內存和線程工作內存)確保所有線程可以看到一致的變量值

六:線程池

池的最終目的都是節約資源,以更小的開銷做更多的事情,從而提高性能。

創建線程池的方式有四種:

6.1.創建一個可重用固定線程集合的線程池,以共享的無界隊列方式來運行這些線程。

ExecutorService threadPool=Executors.newFixedThreadPool(3);

創建了一個固定大小的線程池,容量為3,在FixedThreadPool中,有一個固定大小的池,如果當前需要執行的任務超過了池大小,那么多于的任務等待狀態,直到有空閑下來的線程執行任務,而當執行的任務小于池大小,空閑的線程也不會去銷毀。

6.2.創建一個可根據需要創建新線程的線程池,但是在以前構造的線程可用時將重用它們。

ExecutorService threadPool=Executors.newCachedThreadPool();//線程池的大小會根據執行的任務數動態分配

CachedThreadPool會創建一個緩存區,將初始化的線程緩存起來,如果線程有可用的,就使用之前創建好的線程,如果沒有可用的,就新創建線程。

6.3.創建一個使用單個worker線程的Executor,以無界隊列方式來運行該線程。

ExecutorService threadPool=Executors.newSingleThreadExecutor();

SingleThreadExecutor得到的是一個單個的線程,這個線程會保證你的任務執行完成,如果當前線程意外終止,會創建一個新線程繼續執行任務,這和我們直接創建線程不同,也和newFixedThreadPool(1)不同。

6.4.創建一個可安排在給定延遲后運行命令或者定期地執行的線程池。

ScheduledExecutorService threadPool=Executors.newScheduledThreadPool(3);

ScheduledThreadPool可以定時的或延時的執行任務。

七:鎖對象Lock

Lock是java.util.concurrent.locks包下的接口,Lock實現提供了比使用synchronized方法和語句可獲得的更廣泛的鎖定操作,它能以更優雅的方式處理線程同步問題.

與synchronized不同:

用sychronized修飾的方法或者語句塊在代碼執行完之后鎖自動釋放,而用Lock需要我們手動釋放鎖,所以為了保證鎖最終被釋放(發生異常情況),要把互斥區放在try內,釋放鎖放在finally內。

Java線程培訓

以上就是動力節點java培訓機構的小編針對“Java線程培訓:Java線程內容詳解”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久天天躁夜夜躁狠狠躁2020 | 色狠狠狠狠综合影视 | 青青国产成人久久激情911 | 99热精品成人免费观看 | 一区二区三区视频网站 | 久久综合日韩亚洲精品色 | 国产不卡福利 | 午夜dj影院在线视频观看完整 | 国内精品区一区二区三 | 奇米影视第四色在线 | 色香欲综合成人免费视频 | 亚洲欧美综合国产不卡 | 俄罗斯一级在线播放 | 四虎影院com | 欧美精品亚洲精品日韩专区va | 九九热线精品视频6一 | 伊人久久综合谁合综合久久 | 国产婷婷高清在线观看免费 | a毛毛片| 女性毛片 | 久久久99精品免费观看精品 | 手机看片久久高清国产日韩 | 一级特黄性色生活片一区二区 | 99re久久资源最新地址 | 欧美精品99久久久久久人 | 伊人久久一本 | 天天天天干 | 久久中文娱乐网 | 亚洲日本中文 | 国产福利视频网站 | 亚洲 欧美 国产另类首页 | 日本一级毛片a免费播放 | 国产精品久久九九 | 奇米影视777888 | 国产精品你懂的在线播放 | 一区二区三区成人 | 亚洲国产成人久久精品动漫 | 成 人 黄 色 视频 免费观看 | 四虎www| 福利视频网站 | 久久在草 |