Java高級程序設(shè)計(第二版)課件第7章多線程_第1頁
Java高級程序設(shè)計(第二版)課件第7章多線程_第2頁
Java高級程序設(shè)計(第二版)課件第7章多線程_第3頁
Java高級程序設(shè)計(第二版)課件第7章多線程_第4頁
Java高級程序設(shè)計(第二版)課件第7章多線程_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Java高級程序設(shè)計第7章多線程第7章多線程7.1 線程概述7.2 線程的生命周期7.3 線程的優(yōu)先級7.4 線程同步7.5 線程通信本章目標(biāo)線程的概念線程的生命周期、創(chuàng)建和啟動線程同步本章任務(wù)任務(wù)1創(chuàng)建并啟動多個線程任務(wù)2模擬多窗口售票7.1 線程概述任務(wù)1創(chuàng)建并啟動多個線程編程實現(xiàn):模擬多種動物同時發(fā)聲,叫聲此起彼伏,運(yùn)行效果如圖所示。知識點(diǎn):線程概念、線程的創(chuàng)建和啟動一、線程概念

線程與進(jìn)程相似,是一段完成某個特定功能的代碼,是程序中單個順序的流控制;

但與進(jìn)程不同的是,同類的多個線程是共享一塊內(nèi)存空間和一組系統(tǒng)資源,而線程本身的數(shù)據(jù)通常只有微處理器的寄存器數(shù)據(jù),以及一個供程序執(zhí)行時使用的堆棧。一個進(jìn)程在其執(zhí)行過程中,可以產(chǎn)生多個線程,形成多條執(zhí)行線索每條線索,即每個線程有它自身的產(chǎn)生、存在和消亡的過程線程可以利用這些共享單元來實現(xiàn)數(shù)據(jù)交換,實時通信與必要的同步操作二、線程的創(chuàng)建和啟動1、繼承Thread類創(chuàng)建線程類為創(chuàng)建一個自己的線程,最簡單的方法就是繼承java.lang.Thread類,實例化一個Thread類包含了創(chuàng)建和運(yùn)行線程所需的一切東西Thread類的常用方法,見教材表7-1通過繼承Thread類的方式創(chuàng)建自己的線程子類時,可以通過重寫父類的run()方法來使其執(zhí)行我們指定的操作。啟動線程的方式是:創(chuàng)建一個已經(jīng)定義好的Thread的子類的對象,然后調(diào)用start()方法開始執(zhí)行線程,而不是直接調(diào)用run()方法,run()方法由start()方法去自動調(diào)用。2、使用Runnable接口創(chuàng)建線程可以通過向Thread類的構(gòu)造方法Thread(Runnabletarget)傳遞一個Runnable類型的參數(shù)來創(chuàng)建一個Thread類的對象即一個線程然后調(diào)用該對象的start()方法來實現(xiàn)線程操作,其中target是Runnable接口的實現(xiàn)類的對象使用Runnable接口的方式實現(xiàn)多線程在開發(fā)過程中能夠在一個類中包容所有的代碼,以便封裝。使用Runnable接口的方式的缺點(diǎn)在于:如果想創(chuàng)建多個線程并使各個線程執(zhí)行不同的代碼,就必須創(chuàng)建額外的對象,這樣的話在某些情況下不如直接用多個類分別繼承Thread緊湊。7.2 線程的生命周期線程的生命周期7.3 線程的優(yōu)先級Java中每一個線程都有一個優(yōu)先級(Priority),線程的優(yōu)先級告訴線程調(diào)度程序該線程的重要程度有多大。默認(rèn)情況下,一個線程繼承其父線程的優(yōu)先級,一個線程的父線程就是啟動它的那個線程。Java線程的優(yōu)先級是從MIN_PRIORITY(在Thread中定義為1)到MAX_PRIORITY(在Thread中定義為10)之間的值,數(shù)字越大表明任務(wù)越緊急,缺省值是NORM_PRIORITY(在Thread中定義為5)可以使用setPriority()方法來提高或降低線程的優(yōu)先級,可以使用getPriority()方法來獲知線程的優(yōu)先級7.4 線程同步任務(wù)2模擬多窗口售票編程模擬電影院多窗口售票過程,多位售票員同時售票,每位售票員每賣出一張票即顯示出票一張的信息。運(yùn)行效果如圖所示。知識點(diǎn):線程同步

線程同步是通過對象內(nèi)部的鎖實現(xiàn)的。每一個Java對象都具有一個內(nèi)置的鎖,只有當(dāng)對象包含同步代碼的時候,對象的內(nèi)置鎖才會起效果當(dāng)多個線程希望調(diào)用對象里的同步方法時,先進(jìn)入的線程會拿到這個鎖,后面的線程只有等待這個線程執(zhí)行完畢釋放內(nèi)置鎖后才能進(jìn)入同步方法執(zhí)行,同樣的后面的線程只有一個能拿到鎖7.5 線程通信程序中經(jīng)常創(chuàng)建不同的線程來執(zhí)行不同的任務(wù),然而,有時它們所執(zhí)行的任務(wù)是有某種聯(lián)系的、需要協(xié)作的,為此程序必須令多個線程相互之間可以通信Java通過wait(),notify()和notifyAll()方法實現(xiàn)線程間的通信機(jī)制實訓(xùn)任務(wù)[實訓(xùn)7-1]編寫一個JavaApplication程序,以說明在較高優(yōu)先級的線程執(zhí)行時,它將延遲所有較低優(yōu)先級線程的執(zhí)行。[實訓(xùn)7-2]編寫一個JavaApplication程序,以說明較高優(yōu)先級的線程通過調(diào)用sleep方法,使較低優(yōu)先級獲得運(yùn)行的機(jī)會。[實訓(xùn)7-3]設(shè)有一個緩沖區(qū)空間為10,編寫一個J

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論