




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第八章 多任務(wù)程序設(shè)計(jì),內(nèi)容提要 線程的定義、狀態(tài) 線程的創(chuàng)建 單線程和多線程,假日,三五好友聚集在酒吧,一邊天南地北地閑聊,一邊欣賞音樂,享受美食,其樂融融。 人在同一時(shí)間可以做許多事,如上面情景中所描述的,吃、聊、聽哪個(gè)都不耽誤。為什么人可以這樣呢?其實(shí),是由于人腦通過某種方式,很好地處理了同時(shí)來自多方面的要求,指揮身體的各個(gè)器官做相應(yīng)地動(dòng)作。 計(jì)算機(jī)是否能像人一樣一腦同時(shí)多用呢?回答是肯定的。當(dāng)用戶在計(jì)算機(jī)上看VCD時(shí),可以同時(shí)看到畫面、聽到對(duì)話和音樂。當(dāng)用戶處理文檔時(shí),可以播放音樂,還可以同時(shí)運(yùn)行病毒監(jiān)控軟件、打印文件 計(jì)算機(jī)能做到這一點(diǎn),是因?yàn)橥ㄟ^軟件對(duì)處理文件、播放音樂、運(yùn)行其它應(yīng)
2、用程序各分配一個(gè)線程,就可以同時(shí)完成多個(gè)任務(wù)的執(zhí)行。,引子,知識(shí)要點(diǎn),線程的概念 線程的五種狀態(tài):新建、就緒、運(yùn)行、阻塞、死亡 兩種創(chuàng)建線程的方法:創(chuàng)建Thread的子類、利用Runnable接口 單線程和多線程的實(shí)現(xiàn),任務(wù)1 實(shí)現(xiàn)產(chǎn)品信息處理界面的動(dòng)態(tài)顯示,問題分析 知識(shí)學(xué)習(xí) 線程概念 創(chuàng)建單線程 創(chuàng)建多線程 任務(wù)實(shí)施,執(zhí)行效果,問題分析,任務(wù)描述: 倉(cāng)管系統(tǒng)中,查詢產(chǎn)品信息的同時(shí),在界面的狀態(tài)欄顯示系統(tǒng)日期,在左上角顯示動(dòng)態(tài)歡迎信息。 步驟分析: 線程概念和線程機(jī)制 分析問題中包含幾個(gè)線程,以及各個(gè)線程相關(guān)知識(shí) 日期類應(yīng)用 動(dòng)態(tài)效果的實(shí)現(xiàn)方法 編寫代碼及編譯執(zhí)行,先來兩個(gè)例子: 例1:利用
3、Windows系統(tǒng)中的DOS命令模式執(zhí)行應(yīng)用程序時(shí),首先要進(jìn)入該應(yīng)用程序所在的目錄,然后鍵入命令及應(yīng)用程序的名字,按Enter執(zhí)行程序。此時(shí),若需要執(zhí)行另一個(gè)程序,必須等第一個(gè)程序退出后,才能執(zhí)行第二個(gè)程序。 例2:Windows系統(tǒng)中,可以在進(jìn)行文字處理的同時(shí),欣賞到美妙的音樂;當(dāng)用戶運(yùn)行一個(gè)精美的Flash動(dòng)畫時(shí),不僅可感受到圖像、音響給用戶帶來的愉悅,可能還會(huì)看到一些人物對(duì)話的文字信息 上面的例子說明了什么?,知識(shí)學(xué)習(xí)進(jìn)程與線程,知識(shí)學(xué)習(xí)進(jìn)程與線程,知識(shí)學(xué)習(xí)單線程和多線程,線程:將一個(gè)程序轉(zhuǎn)換成多個(gè)獨(dú)立運(yùn)行的子任務(wù)。這樣的每個(gè)子任務(wù)都叫作一個(gè)“線程”(Thread) 單線程: java的
4、一個(gè)獨(dú)立程序的每一次運(yùn)行稱為java單進(jìn)程 類或者類其中的某些方法或者代碼塊只能“同時(shí)”被一個(gè)線程執(zhí)行。 當(dāng)有多個(gè)線程同時(shí)執(zhí)行到此處時(shí),只有當(dāng)正在執(zhí)行的線程運(yùn)行完畢,釋放鎖之后,其它線程才可以繼續(xù)執(zhí)行。 多線程:與單線程比較而言,同一實(shí)例中有多個(gè)線程”同時(shí)”運(yùn)行,知識(shí)學(xué)習(xí)線程的五種狀態(tài),知識(shí)學(xué)習(xí)兩種創(chuàng)建線程的方式,利用Thread創(chuàng)建線程 創(chuàng)建一個(gè)Thread的子類 重寫Thread的run()方法,實(shí)現(xiàn)內(nèi)容即為程序?qū)?shí)現(xiàn)的功能,案例SimpleThread.java TimePrinter.java,知識(shí)學(xué)習(xí)兩種創(chuàng)建線程的方式,利用Runnable接口實(shí)現(xiàn) 如果需要既可擴(kuò)展自某個(gè)其它類,又能
5、運(yùn)行于自己的線程之中 ,則使用Runnable接口實(shí)現(xiàn) 方法:先創(chuàng)建一個(gè)實(shí)現(xiàn)Runnable接口的類,并實(shí)現(xiàn)其中的run()方法,案例SimpleThread_2.java TimePrinter_2.java,采用兩種創(chuàng)建線程的方法,編寫一個(gè)程序,實(shí)現(xiàn)在applet上,依次顯示三次“I love Java”信息,每次間隔為2000毫秒。 問題:若倉(cāng)庫(kù)系統(tǒng)案例中,直接調(diào)用run()方法,而不調(diào)用start()方法,產(chǎn)品信息處理與動(dòng)態(tài)顯示內(nèi)容是否還是兩個(gè)線程?,動(dòng)手練習(xí),40分鐘,日期相關(guān)類:Date、Calendar和DateFormat Date()方法主要用于創(chuàng)建日期對(duì)象并獲取日期; Ca
6、lendar()方法主要用于獲取和設(shè)置日期; DateFormat()方法主要用于創(chuàng)建日期格式化器,然后再由格式化器將日期轉(zhuǎn)換為各種日期格式串輸出。 JAVA語(yǔ)言規(guī)定的基準(zhǔn)日期為格林尼治標(biāo)準(zhǔn)時(shí)間1970.1.1.00:00:00,當(dāng)前日期是由基準(zhǔn)日期開始所經(jīng)歷的毫秒數(shù)轉(zhuǎn)換出來的。 DateFomat類在java.text包中,Date和Calendar類在java.util包中。,知識(shí)學(xué)習(xí)日期,案例DateDemo.java,動(dòng)畫是基于循環(huán)序列的,通過序列的不斷重復(fù),可產(chǎn)生動(dòng)畫的效果。序列中的每一幅畫面(包括圖像和文本)稱為一幀。通常,動(dòng)畫序列是每秒顯示5-25幀。,知識(shí)學(xué)習(xí)動(dòng)態(tài)效果,任務(wù)實(shí)施
7、,根據(jù)線程的概念,問題中的查詢處理是一個(gè)線程,而顯示系統(tǒng)時(shí)間和動(dòng)態(tài)歡迎信息是另一個(gè)線程。 關(guān)鍵問題 線程的創(chuàng)建 理解日期類 字體的設(shè)置 動(dòng)畫的處理 編碼實(shí)現(xiàn),案例ProductThread.java,倉(cāng)管系統(tǒng)中,需要在供應(yīng)商查詢界面的右上角顯示一個(gè)系統(tǒng)標(biāo)志圖片,并具有閃爍效果。,動(dòng)手練習(xí),30分鐘,Vector類,線程通信中需要多個(gè)數(shù)據(jù)的存放,可利用利用收集來實(shí)現(xiàn)多個(gè)數(shù)據(jù)對(duì)象的存放 收集是其中包含有一組對(duì)象的對(duì)象。 Java技術(shù)支持Vector(向量)、 LinkedList、Bits、Stack、Hashtable等收集類。 Vector類 Vector類允許你創(chuàng)建包含多個(gè)對(duì)象的動(dòng)態(tài)數(shù)組,提
8、供追加、刪除、插入元素的方法。 創(chuàng)建Vector類對(duì)象的語(yǔ)法,public Vector( ) public Vector(int initcap) public Vector(int initcap,int increment) 創(chuàng)建一個(gè)向量類的例子 import java.util.*; public class VectorTest extends Vector public VectorTest() super(1,1); public void addInteger(Integer ints) addElement(ints); ,Public void addString(Stri
9、ng addStr) addElement(addStr); public void insertString(String inStr,int index) insertElementAt(inStr,index); public void displayVector() Object obj; int len=size(); System.out.println(Number of Vector elements: +len); System.out.println(They are :);,for(int i=0;ilen;i+) obj=elementAt(i); System.out
10、.println(obj.toString(); public static void main(String args) VectorTest vec=new VectorTest(); int num=100; Integer int1=new Integer(num); String str1=This is an object added.; String str2=Hi,this is an object inserted . ; vec.addInteger(int1); vec.addString(str1); vec.insertString(str2,1); vec.disp
11、layVector(); ,例子: /java代碼 import java.awt.*; import javax.swing.*; public class HelloApplet extends JApplet public void paint(Graphics g) g.drawString(大家好!,20,20); /html代碼 ,擴(kuò)展1JApplet,JApplet類,Component,Container,Panel,Applet,擴(kuò)展1JApplet,Applet的生命周期 init()方法 start()方法 paint()方法 stop()方法 destroy()方法,擴(kuò)
12、展1JApplet,例子: import java.awt.*; import javax.swing.*; import java.applet.*; public class AppletDemo extends JApplet public void init()/初始化的工作 public void start()/得到聚焦時(shí)進(jìn)行的工作 public void stop()/失去聚焦時(shí)進(jìn)行的工作 public void destroy()/被關(guān)閉時(shí)需要處理的事情 public void paint(Graphics g)/重新繪制窗體內(nèi)容 注意:由于以上方法都是由Java環(huán)境自動(dòng)調(diào)用的
13、,因此,必須聲明為public類型,并且不能接收任何參數(shù),paint()方法除外。,編寫HTML文件的代碼 ,擴(kuò)展1JApplet,執(zhí)行html文件 appletViewer applet.html,擴(kuò)展1JApplet,繪制Applet窗體內(nèi)容相關(guān)的類 Graphics類 Graphics類是抽象類,表示Applet的顯示區(qū)域。它是java.awt包的組成部分,它用于在Applet的顯示區(qū)域上畫圖。 paint()方法 paint()方法取Graphics類的對(duì)象為參數(shù),利用圖形上下文在繪畫區(qū)域內(nèi)畫Applet圖形。 當(dāng)Applet第一次啟動(dòng)和每當(dāng)Applet得到聚焦時(shí),applet會(huì)自動(dòng)地
14、調(diào)用此方法。 update()方法 update()方法是由Component類定義,取Graphics對(duì)象為參數(shù)。當(dāng)applet請(qǐng)求刷新它的窗口時(shí),可以調(diào)用它。Update()方法的默認(rèn)使用背景顏色擦除applet窗口,然后調(diào)用paint()方法,系統(tǒng)更新屏幕。 repaint()方法 當(dāng)需要手動(dòng)重新繪制Applet的時(shí)候,可以通過調(diào)用repaint()方法。repaint()方法對(duì)update()方法進(jìn)行調(diào)用,而后者又默認(rèn)調(diào)用paint()方法重新繪制。,例子: import javax.swing.*; import java.awt.*; import java.applet.*; p
15、ublic class DisplayApplet extends JApplet double f(double x) /調(diào)用Math類的正弦函數(shù) return Math.sin(x/10)*10+60; public void paint(Graphics g) /覆蓋基類的paint()方法 for (int x = 0 ; x getSize().width ; x=x+1) /畫線 g.drawLine(x, (int)f(x), x , (int)f(x) + 1); g.drawString(“This is displayed by the paint method”,20,2
16、0); ,例子: import javax.swing.*; import java.awt.*; import java.applet.*; public class AppletMethods extends JApplet int initCounter = 0; int startCounter = 0; int stopCounter = 0; int destroyCounter = 0; public void init() initCounter+; repaint(); public void start() startCounter+; repaint(); ,public
17、 void stop() stopCounter+; repaint(); public void destroy() destroyCounter+; repaint(); public void paint(Graphics g) g.drawString(“init has been invoked ” + String.valueOf(initCounter) + “ times”, 20,20); g.drawString(“start has been invoked ” + String.valueOf(startCounter) + “ times”, 20,40); g.dr
18、awString(“stop has been invoked ” + String.valueOf(stopCounter) + “ times”, 20,60); g.drawString(“destroy has been invoked ” +String.valueOf(destroyCounter) + “ times”, 20,80); ,在JApplet啟動(dòng)后,在窗體中顯示一個(gè)9*9乘法表,效 果如下: 1 2 4 3 6 9 ,動(dòng)手練習(xí),40分鐘,實(shí)現(xiàn)界面的例子: import javax.swing.*; public class AppletTest extends ja
19、vax.swing.JApplet JLabel lblCustomer; JTextField txtCustomer; JPanel panel; public void init() panel = new JPanel(); lblCustomer = new JLabel(客戶名); txtCustomer = new JTextField(10); /直接調(diào)用了JApplet繼承的方法來得到ContentPane對(duì)象 getContentPane().add(panel); panel.add(lblCustomer); panel.add(txtCustomer); ,實(shí)現(xiàn)事件的
20、例子: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo extends JApplet implements ActionListener public void init() JButton button1 = new JButton(“Hello”); getContentPane().add(button1); button1.addActionListener(this); public void actionPerformed(ActionEvent evt) /使用狀態(tài)窗口 showStatus(“Hello”); ,進(jìn)程是程序的一次動(dòng)態(tài)執(zhí)行過程,進(jìn)程的生命周期包括產(chǎn)生、發(fā)展和消亡三個(gè)階
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 買賣手車車輛合同協(xié)議書
- 航空航天技術(shù)基礎(chǔ)理論測(cè)試題
- 貼瓷磚清包工合同
- 沖孔灌注樁施工勞務(wù)分包合同
- 電力設(shè)施檢修及保養(yǎng)合作協(xié)議
- 物業(yè)委托管理經(jīng)營(yíng)合同
- 冷鏈相關(guān)知識(shí)培訓(xùn)課件
- 不銹鋼制品購(gòu)銷合同
- 國(guó)際商務(wù)管理與貿(mào)易法律專題試題
- 開發(fā)商精裝修合同
- JJF (石化) 007-2018 鉛筆硬度計(jì)校準(zhǔn)規(guī)范-(高清現(xiàn)行)
- 《中醫(yī)兒科學(xué)》課件生理病因病理特點(diǎn)
- 單招面試技巧簡(jiǎn)介PPT幻燈片課件(PPT 59頁(yè))
- 【電子課件】4-1-高壓個(gè)人防護(hù)用具使用
- 迪士尼樂園主題PPT模板
- C形根管的形態(tài)識(shí)別和治療實(shí)用教案
- 部編版《道德與法治》四年級(jí)下冊(cè)第5課《合理消費(fèi)》優(yōu)質(zhì)課件
- 京東入駐流程(課堂PPT)
- 鍋爐巡檢制度
- 中國(guó)國(guó)際航空公司VI形象識(shí)別規(guī)劃提案
- 三菱PLC模擬量模塊fx2n4da中文手冊(cè)
評(píng)論
0/150
提交評(píng)論