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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java基礎(chǔ)學(xué)習(xí):java多線程編程視頻

Java基礎(chǔ)學(xué)習(xí):java多線程編程視頻

更新時間:2020-03-27 12:22:03 來源:動力節(jié)點 瀏覽2367次


  進(jìn)程:一個正在執(zhí)行的程序.每個進(jìn)程執(zhí)行都有一個執(zhí)行順序,該順序是一個執(zhí)行路徑,或叫一個控制單元.一個進(jìn)程至少有一個線程.


  線程:就是進(jìn)程中的一個獨立的控制單元.線程控制這進(jìn)程的執(zhí)行.


  多進(jìn)程的缺點:進(jìn)程切換開銷大;進(jìn)程間的通信很不方便。


  多線程:指的是在單個程序中可以同時運行多個不同的線程,執(zhí)行不同的任務(wù),線程切換的開銷小。


  線程的生命周期


  Java做了很多工作,力求把這些細(xì)節(jié)抽象化。Java提供了一個名為Thread.State的枚舉類型,囊括了操作系統(tǒng)看到的線程狀態(tài)。Thread.State中的值概述了一個線程的生命周期。


  Java基礎(chǔ)學(xué)習(xí):java多線程編程視頻


  NEW


  已經(jīng)創(chuàng)建線程,但還沒在線程對象上調(diào)用start()方法。所有線程一開始都處于這個狀態(tài)。


  RUNNABLE


  線程正在運行,或者當(dāng)操作系統(tǒng)調(diào)度線程時可以運行。


  Java實現(xiàn)內(nèi)存管理和并發(fā)編程的方式。


  BLOCKED阻塞狀態(tài)


  線程中止運行,因為它在等待獲得一個鎖,以便進(jìn)入聲明為synchronized的方法或代碼塊。


  具備運行資格,沒有執(zhí)行權(quán)。


  WAITING


  線程中止運行,因為它調(diào)用了Object.wait()或Thread.join()方法。


  在sleep和wait時,既沒有運行資格,有沒有執(zhí)行權(quán)。


  TIMED_WAITING


  線程中止運行,因為它調(diào)用了Thread.sleep()方法,或者調(diào)用了Object.wait()或Thread.join()方法,而且傳入了超時時間。


  TERMINATED


  線程執(zhí)行完畢。線程對象的run()方法正常退出,或者拋出了異常。


  可見性和可變性


  在Java中,其實一個進(jìn)程中的每個Java應(yīng)用線程都有自己的棧(和局部變量),不過這些線程共用同一個堆,因此可以輕易在線程之間共享對象,畢竟需要做的只是把引用從一個線程傳到另一個線程。


 Java基礎(chǔ)學(xué)習(xí):java多線程編程視頻



  由此引出Java的一個一般設(shè)計原則——對象默認(rèn)可見。如果我有一個對象的引用,就可以復(fù)制一個副本,然后將其交給另一個線程,不受任何限制。Java中的引用其實就是類型指針,指向內(nèi)存中的一個位置,而且所有線程都共用同一個地址空間,所以默認(rèn)可見符合自然規(guī)律。


  除了默認(rèn)可見之外,Java還有一個特性對理解并發(fā)很重要——對象是可變的(mutable),對象的內(nèi)容(實例字段的值)一般都可以修改。使用final關(guān)鍵字可以把變量或引用聲明為常量,但這種字段不屬于對象的內(nèi)容。


  這兩個特性(跨線程可見性和對象可變性)結(jié)合在一起,大大增加了理解Java并發(fā)編程的難度。


  并發(fā)編程的安全性


  如果我們想編寫正確的多線程代碼,得讓程序滿足一個重要的條件,


  即:在一個程序中,不管調(diào)用什么方法,也不管操作系統(tǒng)如何調(diào)度應(yīng)用線程,一個對象看到的任何其他對象都不處于非法或不一致的狀態(tài),這樣的程序才稱得上是安全的多線程程序。


  互斥(mutualexclusion)和狀態(tài)保護(hù)


  只要修改或讀取對象的過程中,對象的狀態(tài)可能不一致,這段代碼就要受到保護(hù)。為了保護(hù)這種代碼,Java平臺只提供了一種機(jī)制:互斥。


  Java為開發(fā)者提供了synchronized關(guān)鍵字。這個關(guān)鍵字可以用在代碼塊或方法上,使用時,Java平臺會限制訪問代碼塊或方法中的代碼。


  因為synchronized關(guān)鍵字把代碼包圍起來,所以很多開發(fā)者認(rèn)為,Java的


  并發(fā)和代碼有關(guān)。有些資料甚至把synchronized修飾的塊或方法中的代碼


  稱為臨界區(qū),還認(rèn)為臨界區(qū)是并發(fā)的關(guān)鍵所在。其實不然,稍后會看到,其


  實我們要防范的是數(shù)據(jù)的不一致性。


  Java平臺會為它創(chuàng)建的每個對象記錄一個特殊的標(biāo)記,這個標(biāo)記叫監(jiān)視器(monitor)。synchronized使用這些監(jiān)視器(或叫鎖)指明,隨后的代碼可以臨時把對象渲染成不一致的狀態(tài)。synchronized修飾的代碼塊或方法會發(fā)生一系列事件,詳述如下:


  線程需要修改對象時,會臨時把對象變成不一致狀態(tài);


  線程獲取監(jiān)視器,指明它需要臨時互斥存儲這個對象;


  線程修改對象,修改完畢后對象處于一致的合法狀態(tài);


  線程釋放監(jiān)視器。


  同步是保護(hù)狀態(tài)的一種協(xié)助機(jī)制,因此非常脆弱。一個缺陷(需要使用


  synchronized修飾的方法卻沒有使用)就可能為系統(tǒng)的整體安全性帶來災(zāi)難


  性的后果。


  之所以使用synchronized這個詞作為“需要臨時互斥存儲”的關(guān)鍵詞,除了說明需要獲取監(jiān)視器之外,還表明進(jìn)入代碼塊時,JVM會從主內(nèi)存中重新讀取對象的當(dāng)前狀態(tài)。類似地,退出synchronized修飾的代碼塊或方法時,JVM會刷新所有修改過的對象,把新狀態(tài)存入主內(nèi)存。


  volatile關(guān)鍵字


  Java還提供了另一個關(guān)鍵字,用來并發(fā)訪問數(shù)據(jù)——volatile。這個關(guān)鍵字指明,應(yīng)用代碼使用字段或變量前,必須重新從主內(nèi)存讀取值。同樣,修改使用volatile修飾的值后,在寫入變量之后,必須存回主內(nèi)存。


  volatile關(guān)鍵字的主要用途之一是在“關(guān)閉前一直運行”模式中使用。編寫多線程程序時,如果外部用戶或系統(tǒng)需要向處理中的線程發(fā)出信號,告訴線程在完成當(dāng)前作業(yè)后優(yōu)雅關(guān)閉線程,那么就要使用volatile。這個過程有時叫作“優(yōu)雅結(jié)束”模式。


  以上就是動力節(jié)點java培訓(xùn)機(jī)構(gòu)的小編針對“Java基礎(chǔ)學(xué)習(xí):java多線程編程視頻”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久永久免费中文字幕 | 老黄网站 | 午夜精品久久久久久毛片 | 欧美一级日韩在线观看 | 特级黄色毛片视频 | 夜夜橹| 久久国产精品-国产精品 | 久草首页在线 | 97视频免费人人观看人人 | 99亚洲乱人伦精品 | 亚洲一区视频在线 | 亚洲a视频 | 免费黄色视屏网站 | 好吊妞在线播放 | 天海翼一区二区在线观看 | 国产成人久久精品 | 中文字幕在线观 | 曰本一级毛片 | 本地毛片 | 狠狠亚洲婷婷综合色香五 | 欧美日本成人 | 亚洲综合图片区 | 国产福利第一视频 | 亚洲韩国欧美 | 天天爱夜夜操 | 韩国日本三级在线观看 | 91精品成人福利在线播放 | 四虎永久免费紧急入口 | 国产粉嫩白浆在线观看 | 一级毛片免费一级直接观看 | 国产精品香蕉在线观看首页 | 免费aⅴ视频 | 91免费国产高清观看 | 久久99九九99九九精品 | 精彩视频一区二区三区 | 欧美一区二区三区香蕉视 | 久青草国产在线视频_久青草免 | 兽王高清完整在线观看 | 久久乐国产综合亚洲精品 | 色八戒国产一区二区三区四区 | 午夜体验区 |