Java程序設計實例教程-第8章.ppt
《Java程序設計實例教程-第8章.ppt》由會員分享,可在線閱讀,更多相關《Java程序設計實例教程-第8章.ppt(29頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第8章多線程 本次課程內(nèi)容 認識多線程線程概念創(chuàng)建多線程線程的 一生 線程的優(yōu)先級線程的同步 1 認識多線程 當我們使用電腦時 可以一邊聽音樂 一邊QQ聊天 一邊打游戲 一個CPU怎么可以同時作這么多事情呢 難道電腦真的可以同時運行多個程序 真的嗎 在同一時間點執(zhí)行各項進程 編譯程序發(fā)送 接收郵件打印文件其他 操作系統(tǒng)允許計算機同時執(zhí)行多項操作 程序 進程 publicclassmainClass publicstaticvoidmain Stringagrs m1 publicstaticvoidm1 m2 m3 publicstaticvoidm2 publicstaticvoidm3 單線程 雙線程 2 線程概念 程序 進程與多任務程序 program 是對數(shù)據(jù)描述與操作的代碼的集合 是應用程序執(zhí)行的腳本 進程 process 是程序的一次執(zhí)行過程 是系統(tǒng)運行程序的基本單位 程序是靜態(tài)的 進程是動態(tài)的 系統(tǒng)運行一個程序即是一個進程從創(chuàng)建 運行到消亡的過程 多任務 multitask 在一個系統(tǒng)中可以同時運行多個程序 即有多個獨立運行的任務 每個任務對應一個進程 線程線程 thread 就是比進程更小的運行單位 是程序中單個順序的流控制 一個進程中可以包含多個線程 簡單來講 線程是一個獨立的執(zhí)行流 是進程內(nèi)部的一個獨立執(zhí)行單元 相當于一個子程序 3 創(chuàng)建多線程 JDK提供的相關類和接口 1 Runnable接口 就提供一個方法run 2 Thread類 實現(xiàn)了Runnable接口創(chuàng)建線程的兩種方法 創(chuàng)建Thread類的子類 重寫該類的run方法創(chuàng)建Runnable接口的實現(xiàn)類 實現(xiàn)接口中的run方法 方法一 創(chuàng)建Thread的子類 創(chuàng)建Thread的子類創(chuàng)建線程對象啟動線程start 方法可以啟動線程 開始執(zhí)行run 中代碼 即 run 內(nèi)代碼 不是調(diào)用執(zhí)行 而是啟動后 由虛擬機自動執(zhí)行的 classMyThreadextendsThread publicvoidrun for inti 1 i 30 i System out println 線程 getName 正在打印 i publicstaticvoidmain String args System out println main開始執(zhí)行 MyThreadmt newMyThread MyThreadmt2 newMyThread mt start mt2 start for inti 1 i 30 i System out println 線程main正在打印 i 線程練習一 管道流 PipedOuputStream PipeInputStream 方法一 PipedInputStreamin newPipedInputStream PipedOutputStreamout newPipedOutputStream in 方法二 PipedInputStreamin newPipedInputStream PipedOutputStreamout newPipedOutputStream In connect out out connect in 問題 要定義的線程類已經(jīng)顯式繼承了一個其他的類怎么辦 方法二 創(chuàng)建Runnable接口的實現(xiàn)類 創(chuàng)建類實現(xiàn)接口classclassnameimplementsRunnable voidrun 創(chuàng)建該類對象 不是線程對象 還要借助Thread類 Thread 該類對象 啟動線程start classMyRunnableimplementsRunnable publicvoidrun for inti 1 i 30 i System out println 線程 Thread currentThread getName 正在打印 i publicstaticvoidmain String args System out println main開始執(zhí)行 MyRunnablemr newMyRunnable Threadt newThread mr t start for inti 1 i 30 i System out println 線程main正在打印 i run不可以調(diào)用 start啟動線程 JVM自動執(zhí)行run classMyRunnableimplementsRunnable publicvoidrun for inti 1 i 30 i System out println 線程 Thread currentThread getName 正在打印 i publicstaticvoidmain String args System out println main開始執(zhí)行 MyRunnablemr newMyRunnable Threadt newThread mr t run for inti 1 i 30 i System out println 線程main正在打印 i 4 線程的 一生 線程的 一生 有幾個階段 1 創(chuàng)建 線程對象生成 2 就緒 start 啟動 等待運行 3 運行 CPU運行run 代碼 4 阻塞 運行過程中因為某種原因 讓出CPU 5 死亡 運行完畢 線程結(jié)束 或拋出異常退出 造成 阻塞 的原因 1 yield 主動出讓CPU 2 sleep 累了 休息一下 3 join 合并線程 暫停 4 I O操作 進行數(shù)據(jù)輸出 暫停代碼運行結(jié)束阻塞 1 休眠結(jié)束 2 join 執(zhí)行完 3 輸入 出操作執(zhí)行完 4 調(diào)用Interrupt 打斷休眠 Thread類提供了獲取和設置線程優(yōu)先級的方法getPriority 獲取當前線程的優(yōu)先級setPriority 設置當前線程的優(yōu)先級Java語言為線程類設置了10個優(yōu)先級 分別使用1 10內(nèi)的整數(shù)表示 整數(shù)值越大代表優(yōu)先級越高 每個線程都有一個默認的優(yōu)先級 主線程的默認優(yōu)先級是5 Thread類定義的三個常量分別代表了幾個常用的優(yōu)先級 MAX PRIORITY 代表了最高優(yōu)先級10MIN PRIORITY 代表了最低優(yōu)先級1NORM PRIORITY 代表了正常優(yōu)先級5 5 線程的優(yōu)先級 classMyThreadextendsThread publicvoidrun for inti 1 i 30 i System out println 線程 Thread currentThread getName 正在打印 i classThreadTest publicstaticvoidmain String args System out println Thread currentThread getPriority MyThreadmt1 newMyThread MyThreadmt2 newMyThread MyThreadmt3 newMyThread mt1 setPriority MIN PRIORITY mt3 setPriority MAX PRIORITY mt1 start mt2 start mt3 start 線程間 共享 數(shù)據(jù)產(chǎn)生的問題實例 銀行的一個賬戶 Bankbank newBank 0001 2000 兩張卡 線程 Operation 1 bank 1200 start Operation 2 bank 1200 start 6 線程的同步 0001 2000 產(chǎn)生這種問題的原因是對共享資源訪問的不完整 為了解決這種問題 需要尋找一種機制來保證對共享數(shù)據(jù)操作的完整性 這種完整性稱為共享數(shù)據(jù)操作的同步 在Java語言中 引入了 對象互斥鎖 的概念 對象互斥鎖 阻止多個線程同時訪問同一個變量 在Java語言中 對象互斥鎖 的實現(xiàn) 用關鍵字synchronized來聲明一個操作共享數(shù)據(jù)的方法或一段代碼 Java對象鎖 用synchronized來標識的代碼段或方法即為 對象互斥鎖 鎖住的部分 如果一個程序內(nèi)有兩個或以上的方法使用synchronized標志 則它們在同一個 對象互斥鎖 管理之下 使用 synchronized 關鍵字 1修飾方法被 synchronized 關鍵字修飾的方法稱為 同步方法 當一個線程訪問對象的同步方法時 被訪問對象就處于 鎖定 狀態(tài) 訪問該方法的其他線程只能等待 對象中的其他同步方法也不能訪問 但非同步方法則可以訪問 使用 synchronized 關鍵字 2修飾部分代碼如果只希望同步部分代碼行 可以使用 同步塊 同步塊的作用與同步方法一樣 只是控制范圍有所區(qū)別 在多線程應用程序中 obj代表被鎖定的共享對象- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- Java 程序設計 實例教程
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://appdesigncorp.com/p-6361723.html