版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、任務三:飄動字幕動畫程序設計,單元五:Java語言高級程序設計,教學目標,知識目標掌握線程的概念以及線程與進程的區(qū)別;理解線程的狀態(tài)和生命周期;掌握Thread類和Runnable接口的常用方法。,能力目標運用多線程的實現方法處理線程問題;能會繼承Thread類或實現Runnable接口來完成多線程技術實現。,教學內容,,,4,,,任務陳述,1,,,2,,,3,知識準備,任務實施,任務拓展,,任務實訓,,5,任務描述:
2、 運用Java多線程技術編寫一個簡單的動畫,要求運行程序時窗口會顯示一個飄動的字幕,每隔1秒字幕會自動改變顯示的位置,先自左向右移動,到達窗口右邊界時,再改變?yōu)樽杂蚁蜃笠苿?。運行結果:,1. 任務陳述,計算機用來模擬和解決人們現實生活中問題,因此使用編程語言描述現實世界同樣需要串、并行共存。計算機中的并行處理即同時處理多個任務,一般叫“多任務”。多任務處理方式的優(yōu)點是充分利用CPU資源,提高效率。含有多個CPU的計算機可將不同任務分配
3、到不同CPU 實現并行處理;單CPU則靠快速切換任務來模擬并行處理,使系統的空轉時間最少。,2. 知識準備,3.1 線程與進程的概念和關系3.1.1 線程與進程的概念程序(program)是為實現特定目標或解決特定問題而用計算機語言編寫的命令序列的集合。進程(Process)是程序關于某個數據集合上的一次運行活動,對應了從代碼加載、執(zhí)行至執(zhí)行完畢的一個完整過程,是系統進行資源分配和調度的一個獨立單位。線程(Thread)是進程的
4、一個實體,CPU調度和分派的基本單位,是比進程更小的能獨立運行的基本單位。,2. 知識準備,3.1.2 線程與進程的關系一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。操作系統把資源分配給進程,而同一進程的所有線程共享該進程的所有資源。進程和線程的關系可以比喻成:當打開Word(Office中的Word)程序,編寫工作計劃.doc文件---打開一個進程而當執(zhí)行這個文件的打印工作---調用了Word中的
5、一個線程線程是作為CPU調度和分配的基本單位,而進程是擁有資源的基本單位。,2. 知識準備,3.2 線程的生命周期 一個線程都要經歷一個從出現到死亡的過程,我們把這個過程稱之為生命周期。線程的生命周期包括4種狀態(tài):New(新生)、Runnable(可運行)、Blocked(被阻塞)和Dead(死亡)。,2. 知識準備,3.2.1 新生狀態(tài)當使用new操作符創(chuàng)建一個新的線程時,線程并不是馬上進行運行,此時線程處在新生(new
6、)狀態(tài)。3.2.2 可運行狀態(tài)當處于新生狀態(tài)的線程調用了start方法后,線程就開啟了成為了可運行(Runnable)了。3.2.3 被阻塞狀態(tài)當線程在可運行狀態(tài)下執(zhí)行了睡眠(sleep)、阻塞I/O操作、等待(wait)等操作后,線程就進入了被阻塞狀態(tài),另一個線程就可以被調度運行了。3.2.4 死亡狀態(tài)線程在可運行狀態(tài)下經過一個正常的run方法結束完成自然死亡。再有就是可以使用stop方法來殺死一個線程,同時拋出一個Thr
7、eadDeath錯誤對象。,2. 知識準備,注意:Java規(guī)范中并沒有把運行單獨作為一個狀態(tài),因為即使調用了start方法,是否接著運行還要看CPU是否有空閑調用。,3.3 線程的創(chuàng)建3.3.1 Thread類的簡介 Thread類是Java提供用來的創(chuàng)建線程的核心類,存在于java.lang包中,它綜合了一個線程所需的屬性和方法,可以使用該類進行線程的創(chuàng)建、線程的常用操作以及設置線程優(yōu)先級等。 常用方法:
8、 構造方法: public Thread():創(chuàng)建一個新的線程對象。 public Thread(String name):創(chuàng)建一個名字為name的新線程對象。 public Thread(Runnable target,String name):在現有的target對象基礎 上創(chuàng)建一個名字為name的線程對象,新的對象實際上是把target作為
9、 了運行對象。,2. 知識準備,常用方法: public void start():啟動線程。如果能獲得CPU的使用權就會自動執(zhí)行調用run()方法。 public void run():這是Thread線程類中最重要的方法,是線程執(zhí)行的起點,線程具體的操作都要編寫在此方法中。 public static void sleep(long mills):使正在運行的線程休眠m
10、ills好秒后再運行。 public final getPriority():獲得線程的優(yōu)先級。 public final setPriority(int priority):設置線程的優(yōu)先級。 public final boolean isAlive():判斷線程是否在活動,如果是返回true,否則返回false。,2. 知識準備,3.3.2 Runnable接口Java不支持多
11、繼承。一旦一個類繼承了Thread類,就不能再繼承其他的類。用戶若想讓其他類支持多線程,那么這個類還可以通過實現Runnable接口。Runnable接口位于java.lang包中,只提供了一個run()方法,該方法與Thread類中run()方法作用一樣,線程執(zhí)行的具體操作都要寫在此方法中。,2. 知識準備,3.3.3 使用Thread類創(chuàng)建線程創(chuàng)建步驟:首先編寫的線程類需要繼承Thread類來實現多線程。其次設計Thread
12、的子類,然后根據工作需要重新設計線程中的 run方法(方法的重寫)。最后再使用start方法啟動線程,將執(zhí)行權轉交給run()方法?!纠?-1】下面示例演示使用Thread類來創(chuàng)建線程并啟動線程,然后要求在線程中進行每隔1秒鐘打印一行數據。,2. 知識準備,【注意】這個程序的運行結果在不同機器上結果是不一樣的,到底什么時候使用線程1還是線程2是由操作系統的線程處理機制控制的。并且這個運行不會結束,只有強行關掉應用程序線程才會關閉
13、。因此注意在寫run()方法時一定要在里面加入結束判斷語句,可以是有限次的循環(huán),也可以是對某個界限的判斷。,public class ThreadEx extends Thread { //繼承Thread類 public ThreadEx(String name){//帶名字的構造方法 super(name); } //重寫run()方法,
14、編寫代碼 public void run(){ System.out.println(this.getName()+” 打印信息”); try{ Thread.sleep(1000);//讓線程休眠1秒鐘,并拋出異常 }catch(Exception ex){
15、 ex.printStackTrace(); }}public class Main { public static void main(String args[]){ //創(chuàng)建線程對象 ThreadEx thread1=new ThreadEx(“線程1”); ThreadEx t
16、hread2=new ThreadEx(“線程2”); //啟動線程 thread1.start(); thread2.start(); }},【例5-1】關鍵代碼,上面的例子沒有辦法預測是哪個線程先運行是因為這兩個線程被CPU認為是相同優(yōu)先級的線程。如要想使得線程之間可以有個預想的執(zhí)行順序那么可以通過setPriority(int
17、 priority)方法來設置線程的優(yōu)先級,優(yōu)先級的改變是可以影響CPU調用線程的順序。優(yōu)先級是一個1-10的數,默認為5,Thread類中包含了3個靜態(tài)常量:public static final int NORM_PRIORITY=5public static final int MIN_PRIORITY=1public static final int MAX_PRIORITY=10【例5-2】根據上例加入線程優(yōu)先級設置
18、,要求線程1的優(yōu)先級最高,線程2的優(yōu)先級最低。,2. 知識準備,public class ThreadEx extends Thread { //繼承Thread類 public ThreadEx(String name,int priority){//帶名字的構造方法 super(name); this.setPriority(priority);}public void run(){
19、 //與上例一樣}public class Main { public static void main(String args[]){ //創(chuàng)建線程對象,并設置優(yōu)先級 ThreadEx thread1=new ThreadEx(“線程1”,Thread.MAX_PRIORITY); ThreadEx thread2=new ThreadEx(“線程2”, Thread.MIN_PRIORITY)
20、; //啟動線程 thread1.start(); thread2.start(); }},【例5-2】關鍵代碼,3.3.4 使用Runnable接口創(chuàng)建線程創(chuàng)建步驟:首先線程類需要實現Runnable接口;其次實現接口中的run()方法;然后創(chuàng)建一個線程對象,并將對象作為參數傳遞給Thread類的構造方法,從而生成一個Thread類;最后調用start()方法啟動線程?!纠?-3】下面示
21、例演示使用Runnable接口來創(chuàng)建線程并啟動線程,然后要求在線程中進行沒隔1秒鐘打印一行數據。,2. 知識準備,public void run(){ System.out.println(name+” 打印信息”); try{ Thread.sleep(1000);//讓線程休眠1秒鐘,并拋出異常 }catch(Exception ex){ ex.printStackTrace();
22、}}public static void main(String args[]){ //創(chuàng)建線程目標對象 RunnableEx re1=new RunnableEx (“線程1”); RunnableEx re2=new RunnableEx (“線程2”); //創(chuàng)建線程對象 Thread t1=new Thread(re1); Thread t2=new Thread(re2)
23、; //啟動線程 t1.start(); t2.start();},【例5-3】關鍵代碼,實施思路在窗口中,通過JLabel顯示一行文字,通過啟動一個線程,在線程中每隔一秒改變一次JLabel對象的位置可實現字幕飄動的動畫效果;創(chuàng)建一個主類MovingText繼承JFrame實現Runnable接口;主類MovingText構造方法中創(chuàng)建JLabel對象,創(chuàng)建線程對象并啟動線程;實現Runnabl
24、e的run方法,用sleep方法休眠一秒,修改JLabel對象位置;在main方法中實例化MovingText。,3. 任務實施,程序代碼 public void run() {try {Thread t = Thread.currentThread();System.out.println("當前線程是: " + t);while (true) {Thread.sleep(
25、1000);//睡眠一秒鐘m_label.setBounds(10 + i * 10, 100, 150, 50);//設置飄動標志if (i > 20)bRight = false;if (i < 0)bRight = true;if (bRight)i++;elsei--;}} catch (Exception e) {
26、},3. 任務實施,一、實現Runnable接口比繼承Thread類所具有的優(yōu)勢 1. 適合多個相同的程序代碼的線程去處理同一個資源; 2. 可以避免java中的單繼承的限制; 3. 增加程序的健壯性,代碼可以被多個線程共享,代碼和數據獨立。二、守護線程的概念 主線程也有可能在子線程結束之前結束,并且子線程不受影響,不會因為主線程的結束而結束。在java程序中,只要前臺有一個線程在
27、運行,整個java程序進程就不會消失,所以此時可以設置一個后臺線程,這樣即使java進程消失了,此后臺線程依然能夠繼續(xù)運行。 【例5-4】下面示例演示使用setDaemon()方法來設置守護線程,從而滿足主線程結束后此守護線程也不會結束。,4. 任務拓展,public class DaemonTest implements Runnable { // 后臺線程int i = 0;public void run() {
28、 while (true) { System.out.println (Thread.currentThread().getName() + "在運行: " + i++);}}public static void main(String[] args) { DaemonTest he = new DaemonTest();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (課件資料)《java程序設計與應用》-張仕斌
- java程序設計基礎 習題答案 作者 代永亮 java程序設計基礎習題答案
- 電子商務客戶服務教學課件作者盤紅華項目三
- 電子商務客戶服務教學課件作者盤紅華項目六
- c語言程序設計_課件_5-
- 電子商務客戶服務教學課件作者盤紅華項目二
- 電子商務客戶服務教學課件作者盤紅華項目五
- 《算法及程序設計》(選修)課件
- 電子商務客戶服務教學課件作者盤紅華項目四
- 電子商務客戶服務教學課件作者盤紅華項目一
- java程序設計
- java語言程序設計教學大綱
- 《java程序設計》教學大綱doc
- c-++-程序設計教程課件
- 電力電子技術教學課件 ppt 作者 邊春元 宋崇輝 28532課件
- java程序設計復習
- java程序設計題目
- java程序設計-教案
- java課程設計---java程序設計
- java課程設計--java程序設計
評論
0/150
提交評論