黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java培訓(xùn) Java培訓(xùn)教程:Java多線程并發(fā)教程

Java培訓(xùn)教程:Java多線程并發(fā)教程

更新時間:2019-12-23 14:31:27 來源:動力節(jié)點 瀏覽2418次


Java培訓(xùn)教程:Java多線程并發(fā)教程


  多線程


  提高了程序的執(zhí)行效率,多線程同時執(zhí)行,因此具有不確定性


  提高了資源利用率,CPU、內(nèi)存等


  占用一定的內(nèi)存空間


  線程越多CPU的調(diào)度開銷越大


  程序的復(fù)雜度會上升


  線程池


  避免線程的創(chuàng)建和銷毀帶來的性能開銷(少開銷)


  加快響應(yīng)速度。任務(wù)到達時不用創(chuàng)建線程,直接使用線程池中的


  避免大量的線程間因互相搶占系統(tǒng)資源而阻塞的現(xiàn)象(避免阻塞)


  能對線程進行簡單的管理并提供定時執(zhí)行、間隔執(zhí)行等功能(便于管理)


  sleep和wait


  sleep是使線程停止一段時間的方法,線程不會釋放對象鎖.在sleep一段時間后,線程不一定立刻回復(fù)執(zhí)行


  wait是線程交互的時候,如果線程對一個同步對象發(fā)出wait調(diào)用,該線程會立刻暫停執(zhí)行.進入等待狀態(tài),直到被喚醒,線程會放棄對象鎖,使得其他線程可以使用同步控制塊或者方法


  多線程和并發(fā)


  run和start的區(qū)別:


  調(diào)用 start() 方法才會啟動新線程;如果直接調(diào)用 Thread 的 run() 方法,它的行為就會和普通的方法一樣;為了在新的線程中執(zhí)行我們的代碼,必須使用 Thread.start() 方法。run只是thread的一個普通方法,start是真正的啟一個線程


  關(guān)鍵字


  可見性


  可見性,是指線程之間的可見性,一個線程修改的狀態(tài)對另一個線程是可見的.也就是一個線程修改的結(jié)果。另一個線程馬上就能看到

  在 Java 中 volatile、synchronized 和 final 實現(xiàn)可見性


  原子性


  將操作變成原子操作


  在 Java 中 synchronized 和在 lock、unlock 中操作保證原子性


  有序性


  Java 語言提供了 volatile 和 synchronized 兩個關(guān)鍵字來保證線程之間操作的有序性


  wait和sleep


  sleep


  在指定的毫秒數(shù)內(nèi)讓當(dāng)前正在執(zhí)行的線程休眠(暫停執(zhí)行),該線程不丟失任何監(jiān)視器的所屬權(quán),sleep() 是 Thread 類專屬的靜態(tài)方法,針對一個特定的線程。


  wait


  方法使實體所處線程暫停執(zhí)行,從而使對象進入等待狀態(tài),導(dǎo)致線程進入等待狀態(tài),直到它被其他線程通過notify()或者notifyAll喚醒,該方法只能在同步方法中調(diào)用。


  比較


  本質(zhì)的區(qū)別:sleep是線程的運行狀態(tài)控制,wait是線程之間的通訊


  sleep是Thread中的方法,wait是Object中的方法


  wait() 方法進入等待狀態(tài)時會釋放同步鎖。調(diào)用的時候需要先獲得該 Object 的鎖,調(diào)用 wait 后,會把當(dāng)前的鎖釋放掉同時阻塞住。而 sleep() 方法不會釋放同步鎖。


  sleep讓線程從運行到阻塞,wait讓線程從運行到等待隊列


  wait要用notify和notify喚醒,只能在同步環(huán)境中使用,sleep可以在任何環(huán)境中使用


  notify notifyall


  notify


  隨機選擇一個在該對象上調(diào)用wait方法的線程,解除其阻塞狀態(tài),該方法只能在同步方法或同步塊內(nèi)部調(diào)用。


  notifyall


  解除所有那些在該對象上調(diào)用wait方法的線程的阻塞狀態(tài),同樣該方法只能在同步方法或同步塊內(nèi)部調(diào)用。


  synchronized


  是一種同步鎖(CPU悲觀鎖),java并發(fā)編程的最常用的用于保證線程安全的方式,所有加上 synchronized 的方法和塊語句,在多線程訪問的時候,同一時刻只能有一個線程能夠訪問。


  修飾實例方法


  作用于當(dāng)前實例加鎖,進入同步代碼前要獲得當(dāng)前實例的鎖。


  實例方法不包括靜態(tài)方法


  修飾靜態(tài)方法


  作用于當(dāng)前類對象加鎖,進入同步代碼前要獲得當(dāng)前類對象的鎖。靜態(tài)成員不專屬于任何一個實例對象,是類成員,因此通過class對象鎖可以控制靜態(tài)成員的并發(fā)操作


  修飾代碼塊


  指定加鎖對象,對給定對象加鎖,進入同步代碼庫前要獲得給定對象的鎖。


  Lock


  采用樂觀鎖


  能完成synchronized所實現(xiàn)的所有功能,Lock有比synchronized更精確的線程語義和更好的性能。Lock的鎖定是通過代碼實現(xiàn)的,而synchronized是在JVM層面上實現(xiàn)的,synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。Lock還有更強大的功能,例如,它的tryLock方法可以非阻塞方式去拿鎖。Lock鎖的范圍有局限性,塊范圍,而synchronized可以鎖住塊、對象、類。在加鎖和解鎖處需要通過lock()和unlock()顯示指出


  volatile


  Volatile 變量具有 synchronized 的可見性特性,但是不具備原子特性。volatile 是一個特殊的修飾符,只有成員變量才能使用它。在Java并發(fā)程序缺少同步類的情況下,多線程對成員變量的操作對其它線程是透明的。volatile 變量可以保證下一個讀取操作會在前一個寫操作之后發(fā)生。線程都會直接從內(nèi)存中讀取該變量并且不緩存它。這就確保了線程讀取到的變量是同內(nèi)存中是一致的。


  volatile


  能保證可見性,不能保證原子性


  當(dāng)對非 volatile 變量進行讀寫的時候,每個線程先從內(nèi)存拷貝變量到CPU緩存中。如果計算機有多個CPU,每個線程可能在不同的CPU上被處理,這意味著每個線程可以拷貝到不同的 CPU cache 中。而聲明變量是 volatile 的,JVM 保證了每次讀變量都從內(nèi)存中讀,跳過 CPU cache 這一步。


  輕量級的 synchronized


  Volatile變量的同步性較差(但有時它更簡單并且開銷更低),而且其使用也更容易出錯。


  volatile 并不完全是線程安全的


  用volatile修飾的變量,線程在每次使用變量的時候,都會讀取變量修改后的值。volatile很容易被誤用,用來進行原子性操作。


  訪問最新值


  Volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內(nèi)存中重讀該成員變量的值。而不是從各個線程的“工作內(nèi)存”。而且,當(dāng)成員變量發(fā)生變化時,強迫線程將變化值回寫到共享內(nèi)存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。


  效率問題


  synchronized關(guān)鍵字是防止多個線程同時執(zhí)行一段代碼,那么就會很影響程序執(zhí)行效率,而volatile關(guān)鍵字在某些情況下性能要優(yōu)于synchronized


  volatile關(guān)鍵字是無法替代synchronized關(guān)鍵字的,因為volatile關(guān)鍵字無法保證操作的原子性。


  JAVA高級


  對象序列化


  很多情況下,對象內(nèi)部狀態(tài)是需要被持久化的,將運行中的對象狀態(tài)保存下來(最直接的方式就是保存到文件系統(tǒng)中),在需要的時候可以還原,即使是在Java虛擬機退出的情況下


  對象序列化機制是Java內(nèi)建的一種對象持久化方式,可以很容易實現(xiàn)在JVM中的活動對象與字節(jié)數(shù)組(流)之間進行轉(zhuǎn)換,使用得Java對象可以被存儲,可以被網(wǎng)絡(luò)傳輸,在網(wǎng)絡(luò)的一端將對象序列化成字節(jié)流,經(jīng)過網(wǎng)絡(luò)傳輸?shù)骄W(wǎng)絡(luò)的另一端,可以從字節(jié)流重新還原為Java虛擬機中的運行狀態(tài)中的對象


Java培訓(xùn)教程:Java多線程并發(fā)教程


       以上就是動力節(jié)點Java培訓(xùn)機構(gòu)小編介紹的“Java培訓(xùn)教程:Java多線程并發(fā)教程”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


       相關(guān)文章


  零基礎(chǔ)怎么自學(xué)Java,完整版Java學(xué)習(xí)路線圖


  你還在糾結(jié)學(xué)Java,是自學(xué)還是去培訓(xùn)班嗎


  一個標(biāo)準(zhǔn)的Java程序員如何進階?


  Java學(xué)習(xí)路線清單,快速進階Java


  Java編程初學(xué)者要如何進階


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

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 中文丝袜| 国产精品久久久久精 | free性中国hd护士高清 | 黄色小视频在线 | 欧美亚洲中日韩中文字幕在线 | 二区在线视频 | 8x福利精品第一导航 | 日本不卡视频在线播放 | 看全色黄大色大片免费久久久 | 成人a毛片久久免费播放 | 日韩精品在线第一页 | 国产欧美一区二区三区视频 | 黑人videosex中国另类 | 久久亚洲国产精品一区二区 | 亚洲视频在线观看免费视频 | 狠狠做狠狠做综合日日 | 2019亚洲日韩新视频 | 波多野结衣在线观看免费区 | 国产午夜精品一区二区三区不卡 | 五月婷婷精品 | 成人三级在线 | 亚洲中文字幕特级毛片 | 欧美精品国产日韩综合在线 | 亚洲欧美韩日 | 国产高清国产精品国产k | 欧美xxxxxxx人妖极品 | 国产女同志videos | 精品在线一区二区三区 | 欧美色久 | 看一级特黄a大一片 | 狠狠色丁香九九婷婷综合五月 | 天天看天天射天天碰 | 国产精品一区二区不卡 | 欧美在线观看一区 | 97在线公开视频 | 一级色黄 | 国产每日更新 | 国产一区二区中文字幕 | 亚洲精品动漫在线观看 | 成人免费观看网站 | 国产成人18黄网站免费 |