![十五章及多線程_第1頁](http://file4.renrendoc.com/view8/M01/0C/08/wKhkGWcVO5GAd4jWAAAy_SYdsBk797.jpg)
![十五章及多線程_第2頁](http://file4.renrendoc.com/view8/M01/0C/08/wKhkGWcVO5GAd4jWAAAy_SYdsBk7972.jpg)
![十五章及多線程_第3頁](http://file4.renrendoc.com/view8/M01/0C/08/wKhkGWcVO5GAd4jWAAAy_SYdsBk7973.jpg)
![十五章及多線程_第4頁](http://file4.renrendoc.com/view8/M01/0C/08/wKhkGWcVO5GAd4jWAAAy_SYdsBk7974.jpg)
![十五章及多線程_第5頁](http://file4.renrendoc.com/view8/M01/0C/08/wKhkGWcVO5GAd4jWAAAy_SYdsBk7975.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十五章線程及多線程
本講內容線程的定義多線程舉例線程的創(chuàng)建與啟動兩種實現(xiàn)多線程方法的比較本講目標線程的創(chuàng)建與啟動兩種實現(xiàn)多線程方法的比較線程的定義什么是程序?程序是一段靜態(tài)的代碼,它是應用程序執(zhí)行的藍本。什么是進程?進程是指一種正在運行的程序,有自己的地址空間。作為藍本的程序可以被多次加載到系統(tǒng)的不同內存區(qū)域分別執(zhí)行,形成不同的進程?;谶M程的特點是允許計算機同時運行兩個或更多的程序。什么是線程?線程是進程內部單一的一個順序控制流。一個進程在執(zhí)行過程中,可以產生多個線程。每個線程也有自己產生、存在和消亡的過程。進程是系統(tǒng)資源分配的單位,可包括多個線程。線程是獨立調度和分派的基本單位,共享進程資源。引入進程是為了多個程序并發(fā)執(zhí)行,提高資源的利用率和系統(tǒng)吞吐量引入線程,是為了減少程序在并發(fā)執(zhí)行時所付出的時空開銷多線程多線程編程的含義是將程序任務分成幾個并行的子任務,常用于網絡編程中。多線程是與單線程比較而言的普通的Windows采用多線程程序結構,其工作原理是:主程序有一個消息循環(huán),不斷從消息隊列中讀入消息來決定下一步所要干的事情,一般是針對一個函數,只有等這個函數執(zhí)行完之后,主程序才能接收另外的消息來執(zhí)行。在執(zhí)行這個子函數過程中你什么也不能干,但往往讀網絡數據和等待用戶輸入有很多時間處于等待狀態(tài),多線程利用這個特點將任務分成多個并發(fā)任務后,就可以解決這個問題多線程的好處多線程的優(yōu)點多線程使系統(tǒng)的空轉時間最少,提高CPU利用率共享資源,不浪費內存。線程間的信息傳遞容易。線程控制靈活,可在程序中自由調度。如何實現(xiàn)多線程?Java中實現(xiàn)多線程的類有兩種方法:擴展java.lang.Thread類,覆蓋Thread類的run方法。生成實現(xiàn)java.lang.Runnable接口的類并將其它的實例與java.lang.Thread實例相關聯(lián)。Thread類是負責向其它類提供線程支持的最主要的類,要使用一個類具有線程功能,在Java中只要簡單地從Thread類派生一個子類就可以了。多線程舉例—Thread類classThreadDemo1{ public
static
voidmain(Stringargs[]){
MyThreadt=newMyThread(); t.start(); while(true){ System.out.println("mainthreadisrunning"); } }}classMyThreadextendsThread{ public
void
run(){
while(true){ System.out.println(Thread.currentThread().getName()+"isrunning"); } }}多線程舉例—Runnable接口classThreadDemo1{ public
static
voidmain(Stringargs[]){
MyThreadmt=newMyThread(); Threadt=newThread(mt); t.start();
while(true){ System.out.println("mainthreadisrunning"); } }}classMyThreadimplementsRunnable{
public
void
run(){
while(true){ System.out.println(Thread.currentThread().getName()+"isrunning"); } }}線程的創(chuàng)建與啟動兩種方法來創(chuàng)建線程:繼承Java.lang.Thread類,并覆蓋run()方法。classMyThreadextendsThread{publicvoidrun(){/*覆蓋該方法*/}}實現(xiàn)Java.lang.Runnable接口,并實現(xiàn)run()方法。 classMyThreadimplementsRunnable{publicvoidrun(){/*實現(xiàn)該方法*/}}線程的創(chuàng)建與啟動新建的線程不會自動開始運行,必須通過start()方法啟動線程。如果不調用這個方法,線程將不會運行。也就是說可以事先創(chuàng)建線程,并在需要的時候才啟動他們。如:繼承Thread的線程:MyThreadt=newMyThread();t.start();實現(xiàn)Runnable接口的線程:MyThreadmt=newMyThread();Threadt=newThread(mt);t.start();線程的創(chuàng)建與啟動主線程介紹在Java程序啟動時,一個線程立刻運行,該線程通常稱為程序的主線程。Main就是在這個線程上運行。當不再產生新的線程時,程序是單線程的。主線程的重要性體現(xiàn)在兩個方面:它是產生其他子線程的線程。通常它必須最后完成執(zhí)行,因為它執(zhí)行各種關閉動作線程的四種狀態(tài)新狀態(tài):線程已被創(chuàng)建但尚未執(zhí)行(start()尚未被調用)??蓤?zhí)行狀態(tài):線程可以執(zhí)行,雖然不一定正在執(zhí)行。CPU時間隨時可能被分配給該線程,從而使得它執(zhí)行。死亡狀態(tài):正常情況下run()返回使得線程死亡。調用stop()或destroy()亦有同樣效果,但是不被推薦,前者會產生異常,后者是強制終止,不會釋放鎖。阻塞狀態(tài):線程不會被分配CPU時間,無法執(zhí)行。線程的創(chuàng)建與啟動方法用途staticThreadcurrentThread()得到當前線程finalStringgetName()返回線程的名稱finalvoidsetName(Stringname)將線程的名稱設置為由name指定的名稱voidstart()調用run()方法啟動線程,開始線程的執(zhí)行voidrun()存放線程體代碼Thread中常用方法線程的創(chuàng)建與啟動示例得到當前線程,并為其改名例子publicclassMainThreadDemo{publicstaticvoidmain(Stringargs[]){
Threadt=Thread.currentThread();System.out.println(“當前線程名稱是:"+t.getName());
t.setName("MyJavaThread");
System.out.println(“改名后線程名稱是:"+t.getName());System.out.println("輸出當前線程"+t);}}兩種實現(xiàn)多線程方法的比較classMyThreadextendsThread{private
inttickets=100;public
voidrun(){while(true){if(tickets>0)System.out.println(Thread.currentThread().getName()+"issallingticket"+tickets--);}}}classTest{public
static
voidmain(String[]args){MyThreadmt=newMyThread();mt.start();mt.start();mt.start();mt.start();}}使用extendsThread方法一個Thread對象只能啟動一個線程,無論調用幾次start()方法結果:一個窗口賣了100張票,其他窗口未賣實例:實現(xiàn)四個窗口共賣100張票效果兩種實現(xiàn)多線程方法的比較classMyThreadextendsThread{private
inttickets=10;public
voidrun(){while(true){if(tickets>0)System.out.println(Thread.currentThread().getName()+"issallingticket"+tickets--);}}}classTest{public
static
voidmain(String[]args){newMyThread().start();newMyThread().start();newMyThread().start();newMyThread().start();}}使用extendsThread方法結果:四個窗口各賣了100張票實例:實現(xiàn)四個窗口共賣100張票效果兩種實現(xiàn)多線程方法的比較classMyThreadimplementsRunnable{private
inttickets=100;public
voidrun(){while(true){if(tickets>0)System.out.println(Thread.currentThread().getName()+"issallingticket"+tickets--);}}}classTest{public
static
voidmain(String[]args){MyThreadmt=newMyThread();newThread(mt).start();newThread(mt).start();newThread(mt).start();newThread(mt).start();}}使用implementsRunable方法結果:四個窗口共賣了100張票實例:實現(xiàn)四個窗口共賣100張票效果兩種實現(xiàn)多線程方法的比較使用Runnable接口創(chuàng)建多線程的優(yōu)點:同一個Runnable對象可以傳遞給多個線程,可以實現(xiàn)資源共享,所以適合多個相同程序代碼的線程去處理同一資源的情況可以避免由于Java的單繼承帶來的局限有利于程序的健壯性,代碼能被多個線程共享,代碼與數據是獨立的線程的優(yōu)先級線程在優(yōu)先級代表該線程的重要程度線程的優(yōu)先指當有多個線程同時處于可執(zhí)行狀態(tài)并等待獲得CPU時間時,線程調度系統(tǒng)根據各個線程的優(yōu)先級來決定給誰分配CPU時間,優(yōu)先級高的線程有更大的機會獲得CPU時間,優(yōu)先級低的線程也不是沒有機會,只是機會要小一些罷了。
可調用Thread類的方法getPriority()和setPriority()來獲取或設置線程的優(yōu)先級線程的優(yōu)先級界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之間,缺省是(NORM_PRIORITY)。客戶存取款多線程實例產生數據不一致的原因多個線程并發(fā)訪問了同一個對象,如果破壞了不可分割的操作,從而就會造成數據不一致被多線程并發(fā)訪問時如果一個對象有可能出現(xiàn)數據不一致的問題,那么這個對象稱為線程不安全的對象線程同步如何解決多線程并發(fā)訪問的問題
synchronized(object){
代碼塊
}線程同步線程同步線程同步線程的管理線程包括new()開始、running()運行、wait()等候和done()結束執(zhí)行四種狀態(tài)。第一次創(chuàng)建線程時,都位于new狀態(tài),在這個狀態(tài)下,不能運行線程,只能等待。這時,線程要么調用start方法開始運行,要么送往done狀態(tài)結束。位于done中的線程已經結束執(zhí)行,這是線程的最后一個狀態(tài)。一旦線程位于這個狀態(tài),就不能再次出現(xiàn),而且當Java虛擬機中的所有線程都位于done狀態(tài)時,程序就強行中止。線程的管理當前正在執(zhí)行的所有線程都位于running狀態(tài),在程序之間用某種方法把處理器的執(zhí)行時間分成時間片。位于running狀態(tài)的每個線程都是能運行的,但在一個給定的時間內,每個系統(tǒng)處理器只能運行一個線程。與位于running
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 劉玲琍:無聲世界筑夢人打開有聲世界鑰匙
- 急性心肌梗死院前急救措施有哪些
- 一級建造師法律法規(guī)重要知識點
- 別具風味的小炒魚
- 花雕立體景觀合同范本
- 四川燈具項目可行性研究報告
- 中國鎢銅棒項目投資可行性研究報告
- 閥門完工報告
- 客車出租合同范本
- 2025年陶瓷儲蓄豬項目投資可行性研究分析報告
- 中央2024年中國建設報社招聘應屆生筆試上岸歷年典型考題與考點剖析附帶答案詳解
- 阻燃更要消煙一文讓你掌握無煙阻燃改性技術的方方面面
- 2024入贅協(xié)議書范本
- 2023年人教版七年級歷史下冊《全冊課件》
- 新大象版科學三年級下冊全冊知識點 (復習用)
- 《提案與方案優(yōu)化設計》課件-第二部分 平面布局方案設計
- 2024年黑龍江省專升本考試生理學護理學專業(yè)測試題含解析
- 奧特康唑膠囊-臨床用藥解讀
- 《新能源發(fā)電技術第2版》 課件全套 朱永強 第1-10章 能源概述- 分布式發(fā)電與能源互補
- 認識統(tǒng)計年報基本概念與作用
- 2024年內蒙古化工職業(yè)學院高職單招(英語/數學/語文)筆試歷年參考題庫含答案解析
評論
0/150
提交評論