《JAVA程序設(shè)計(jì)》授課教案第次_第1頁
《JAVA程序設(shè)計(jì)》授課教案第次_第2頁
《JAVA程序設(shè)計(jì)》授課教案第次_第3頁
《JAVA程序設(shè)計(jì)》授課教案第次_第4頁
《JAVA程序設(shè)計(jì)》授課教案第次_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、JAVA程序設(shè)計(jì) 授 課 教 案 授課題目多線程學(xué)時(shí)安排6 學(xué)時(shí)課程設(shè)計(jì)網(wǎng)絡(luò)聊天系統(tǒng)教學(xué)目的認(rèn)識(shí)線程的機(jī)制、線程的操作和使用教學(xué)要求理解定制線程類 、繼承線程類、線程的生命周期教學(xué)重點(diǎn)線程的機(jī)制、線程的生命能周期教學(xué)難點(diǎn)線程的應(yīng)用授課類型理論課、實(shí)驗(yàn)課授課場地教室、實(shí)驗(yàn)室教學(xué)方式講授、演示、提問、討論教輔設(shè)備投影儀教學(xué)內(nèi)容1、 引入各位!想象以下這個(gè)場景:目前大多數(shù)的計(jì)算機(jī)游戲使用圖象和聲音,但是各位是否注意到游戲的圖象、你的得分、和游戲的音樂是在同時(shí)進(jìn)行?想象這樣一個(gè)情形,你看見屏幕先變化,然后再更新你的得分,最后你聽到聲音!一個(gè)游戲在進(jìn)行時(shí)能同時(shí)擁有所有這些元素。更專業(yè)一點(diǎn)的說,程序此時(shí)已

2、經(jīng)分成了三個(gè)子單元,每個(gè)單元由線程來處置。2、 經(jīng)驗(yàn):在解釋問題陳述之前,應(yīng)首先確立多線程應(yīng)用的需要。區(qū)分Thread類和Runnable接口。 解釋線程的生命周期(尤其是非運(yùn)行狀態(tài))。注意:闡明在Java中,線程是由JVM管理的。另外,雖然用戶程序是多線程的,可實(shí)際上任一時(shí)刻只有一個(gè)線程在運(yùn)行。由于分配給每一個(gè)線程的時(shí)間片非常短,因此看上去多個(gè)線程似乎是在同時(shí)運(yùn)行。3、 知識(shí)點(diǎn)講解及程序代碼分析 什么是線程與進(jìn)程進(jìn)程:簡單來說就是一個(gè)程序在給定活動(dòng)空間和初始條件下,在一個(gè)處理機(jī)上的執(zhí)行過程??梢院唵蔚睦斫鉃檫M(jìn)程就是一個(gè)正在運(yùn)行的程序。線程:一個(gè)線程是一個(gè)程序內(nèi)部的一個(gè)順序控制流。即:一個(gè)或多

3、個(gè)線程組成一個(gè)進(jìn)程。線程與進(jìn)程的區(qū)別:線程與進(jìn)程的區(qū)別主要有以下兩點(diǎn):多個(gè)進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)是完全獨(dú)立的,而多線程是共享一塊內(nèi)存空間和一組系統(tǒng)資源,有可能互相影響。線程本身的數(shù)據(jù)通常只有寄存器數(shù)據(jù),以及一個(gè)程序執(zhí)行時(shí)使用的堆棧,所 以線程的切換比進(jìn)程切換的負(fù)擔(dān)要小。1 / 8線程本質(zhì)上就是一小部分獨(dú)立的代碼,處理器將其與其他線程同時(shí)運(yùn)行。線程不一定是整個(gè)程序(處理多線程時(shí),一般將程序稱為進(jìn)程),因?yàn)檫M(jìn)程可以根據(jù)需要?jiǎng)?chuàng)建很多線程。一個(gè)線程的例子public class CurrentThread public static void main(String args)Thread thisTh

4、read = Thread.currentThread();tryfor(int counter=0;counter<10;counter+=2)System.out.println(counter);Thread.sleep(1000);catch(InterruptedException e)System.out.println("hi!I was interrupted");在上面的應(yīng)用程序中,當(dāng)前線程用CurrentThread()方法獲得。每次線成打印計(jì)數(shù)器的值,線程被設(shè)為1000毫秒(1秒)。線程可以引發(fā)異常如果有另一個(gè)線程中斷睡眠。因此,sleep()方

5、法被保護(hù)在try塊里。輸出結(jié)果:定制線程類:實(shí)現(xiàn)線程最重要的方法是實(shí)現(xiàn)其中的run方法,run方法決定了線程所做的工作??梢允褂脙煞N方法來定制線程類提供 RUN方法:(1) 繼承線程類Thread(2) 實(shí)現(xiàn)Runnable繼承線程類Threadjava.lang.Thread類用于在多線程應(yīng)用程序構(gòu)造和訪問單個(gè)多線程,它支持許多方法獲得有關(guān)線程的活動(dòng)信息,線程的設(shè)置和檢查屬性,引起線程等待,中斷或破壞的信息。由擴(kuò)充Thread類你能使應(yīng)用程序和類運(yùn)行在獨(dú)立的多線程。Java線程的生命周期 每個(gè)線程都是和生命周期相聯(lián)系的,一個(gè)生命周期含有多個(gè)狀態(tài),這些狀態(tài)間可以互相轉(zhuǎn)化。 Java的

6、線程的生命周期可以分為4個(gè)狀態(tài);創(chuàng)建(new)狀態(tài);可運(yùn)行(runnable)狀態(tài);不執(zhí)行(notrunnable)狀態(tài);消亡(dead)狀態(tài)。 如下圖描述:線程中斷我們已經(jīng)知道,當(dāng)線程的run方法運(yùn)行結(jié)束,該線程也就自然終止。雖然也可以調(diào)用線程的stop方法來強(qiáng)制殺死一個(gè)線程,但該方法是不安全的,因此不推薦使用。Java中還提供了interrupt方法用來中斷一個(gè)線程。當(dāng)調(diào)用一個(gè)線程的interrupt方法時(shí),即向該線程發(fā)送一個(gè)中斷請(qǐng)求,并將該線程的“interrupted”狀態(tài)值置為true線程的同步當(dāng)兩個(gè)線程需要分享數(shù)據(jù),你必須保證一個(gè)線程不會(huì)改變另一個(gè)線程使用的數(shù)據(jù)。例如,如果程序有兩

7、個(gè)線程,一個(gè)從文件讀你的工資而另一個(gè)試著更新工資,就可能發(fā)生數(shù)據(jù)錯(cuò)亂,JAVA用同步的方法或同步的語句允許你對(duì)等多線程操作。線程的同步用synchronized關(guān)鍵字說明的方法能訪問對(duì)等存取的對(duì)象。在給定的時(shí)間片你能為對(duì)象調(diào)用一個(gè)同步方法。這防止在多線程里同步方法沖突。所有對(duì)象和類與監(jiān)督程序有關(guān)。監(jiān)督程序控制同步方法訪問對(duì)象或類。它保證只有一個(gè)線程在任何給定的時(shí)間片里訪問資源。同步方法在調(diào)用該對(duì)象時(shí)獲取對(duì)象的監(jiān)督程序。當(dāng)執(zhí)行同步方法時(shí),對(duì)象被鎖住以至不能調(diào)用其他同步方法。一旦方法執(zhí)行完,監(jiān)督程序自動(dòng)釋放。當(dāng)同步方法執(zhí)行某種方法(如wait()),監(jiān)督程序也釋放。與同步方法有關(guān)的線程變得不可運(yùn)行

8、直到滿足等待條件。當(dāng)?shù)却龡l件滿足,線程必須獲取對(duì)象的監(jiān)督程序以便成為可運(yùn)行的。下列代碼顯示同步方法和對(duì)象監(jiān)督程序如何被多線程用于對(duì)等訪問普通對(duì)象的。import java.lang.Thread;import java.lang.System;import java.lang.InterruptedException;class MyThread extends Threadstatic String message="l","like","to","java"public MyThread(String id)s

9、uper(id); public void run()Syn.displayList(getName(),message);void waiting()trysleep(1000);catch(InterruptedException e)System.out.println("Interrupted");class Sthreadpublic static synchronized void displayList(String name,String list)for(int i=0;i<list.length;+i)MyThread thread=(MyThre

10、ad)Thread.currentThread();thread.waiting();System.out.println(name+listi);class Threadtestpublic static void main(String args)MyThread thread1=new MyThread("Thread1: ");MyThread thread2=new MyThread("Thread2: ");thread1.start();/開始第一個(gè)線程thread2.start();/開始第二個(gè)線程在上述代碼,MyThread類的run(

11、)方法調(diào)用Syn類的displayList()方法。displayList()方法是static(靜態(tài)的)。該方法顯示L like to java在顯示消息的每一個(gè)詞之前它調(diào)用waiting()方法等待片刻。DisplayList()方法使用Thread類的currentThread() 方法來引用當(dāng)前線程以便調(diào)用waiting()方法。當(dāng)使用syschronized關(guān)鍵字,thread1(第一線程)調(diào)用displayList(),獲得Syn類的監(jiān)督程序(因?yàn)閐isplayList是一種靜態(tài)方法),而displayList()負(fù)責(zé)thread1的顯示。既然thread1已獲得Syn類的監(jiān)督程序

12、,在它調(diào)用displayList()顯示輸出之前,thread2(第二線程)必須等待直到釋放監(jiān)督程序。如果你刪除synchronized關(guān)鍵字并觀察輸出你將發(fā)現(xiàn)displayList()被thread1和thread2獨(dú)立調(diào)用為而且兩者同時(shí)執(zhí)行。線程thread1調(diào)用displayList(),顯示一些輸出,并且當(dāng)thread2執(zhí)行時(shí)等待。線程同步:l 線程必須關(guān)注與其并發(fā)執(zhí)行的其他線程的狀態(tài)和行為。一個(gè)很典型的例子就是生產(chǎn)者/消費(fèi)者問題。l 在線程同步我們主要講:Ø 對(duì)象鎖 Ø 可重入鎖 Ø notifyAll和wait方法注意問題:1、對(duì)象鎖的取得和釋放由Java運(yùn)行系統(tǒng)自動(dòng)完成,但始終遵循以下規(guī)則:在任何時(shí)刻,一個(gè)對(duì)象的對(duì)象鎖至多只能被一個(gè)線程擁有;2、對(duì)象鎖的取得和釋放由Java運(yùn)行系統(tǒng)自動(dòng)完成,但始終遵循以下規(guī)則:在任何時(shí)刻,一個(gè)對(duì)象的對(duì)象鎖至多只能被一個(gè)線程擁有本章小結(jié) :本章主要介紹了線程和進(jìn)程的定義,區(qū)別。線程是在程序以內(nèi)的順序控制流。每個(gè)程序最少有一個(gè)線程稱為主要線程。只有一個(gè)線程的應(yīng)用程序稱為單線程應(yīng)用程序,多線程應(yīng)用程序有一個(gè)以上的線程。Thread類用于在程序中創(chuàng)建和

溫馨提示

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

評(píng)論

0/150

提交評(píng)論