摘要:該文介紹了利用JAVA語言的多線程技術,對“龜兔賽跑”寓言故事的模擬。從模擬程序的具體設計思路,到詳細的實現過程,將技術的應用融入到一個有趣的問題的解決中,既可方便完成教學內容,又可有效激發學生學習興趣,對JAVA多線程技術的案例教學實現有很好的參考價值。
關鍵詞:多線程;模擬;龜兔賽跑;案例教學
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)34-1982-02
Tortoise and Hare Race simulation with JAVA Multi Thread Technology
LIU Hui-min
(Dept. of Computer Sci., Huanggang Polytechnic College, Huanggang 438002, China)
Abstract: A simulation for the Tortoise and Hare Race apologue story with Java multi thread technology has been introduced in this paper. By the detail description on the simulation program design thinking to implementation procedures, the technology application has been embedded into the solving of an interesting real problem. This simulation tool will make the teaching easily, and stimulates student’s interesting on learning effectively. It will also have good reference value for the teaching of Java multi thread technology with cases.
Key words: multi-thread; simulation; tortoise and hare race; teaching with cases
1 引言
“龜兔賽跑”的寓言故事家喻戶曉,如果能夠用直觀形象的方式將故事表達的內容演示出來,那將更有利于人們對故事的理解和認識,怎樣用程序的方式把故事模擬表示出來呢?
為了便于計算機模擬,需要把故事中的情節數字化。我們假定以下一組數據:比賽的總路程是60米,兔子每分鐘跑3米,烏龜每分鐘跑1米,貪睡的兔子每跑8分鐘就休息24分鐘,即兔子每跑24米路程就要休息24分鐘。由于按實際時間,模擬過程將會相對拉長,可用機器的1秒代表實際的1分鐘。
2 設計思路
賽跑的過程是兩個比賽對象并行前進的過程,考慮到應用需求,我們可以利用多線程技術,所謂多線程就是指同時存在幾個執行體,按幾條不同的執行線索共同工作的情況,這與我們的要求剛好吻合,Java語言對多線程提供強大的支持。
用直觀圖形描述龜兔跑步前進過程:每過一秒,兔子走過的路程文本框中增加三個“#”號,烏龜走過的路程文本框中增加一個“#”號。跑完路程結束線程,并顯示各自跑完全程總共用的時間。參考運行如圖1。
3 實現過程
3.1 構建模擬程序界面
考慮到需要動態表示烏龜和兔子賽跑過程,在此選擇用在已跑路上增加符號標識的方法,每米用一個“#”表示,烏龜和兔子隨著時間的推移,跑過的路程越來越多,那么“#”標識也在不斷地增加,在文本框中顯示不斷增加的“#”號串。
rabbit=new JTextField(50);
tortoise=new JTextField(50);
rab_road+=3;//跑過的路程加3米
rab_string=rab_string+\"###\";//兔子每跑一秒,增加三個“#”號
rabbit.setText(rab_string);//在文本框上顯示兔子跑過的路程
3.2 選擇多線程的實現方法
Java實現多線程有兩種途徑:第一種是通過定義繼承Thread類的子類;另一種方法是通過定義實現Runnable接口類。在java.lang包中定義了一個Thread類和Runnable接口,Runnable接口是所有線程類都必須繼承的接口,Thread類是系統預定義的線程類,它也實現了Runnable接口。在Runnable接口中只定義了一個run()方法,run()方法是用來定義實現線程的具體操作的,它被系統自動識別并執行,具體地說,線程在運行狀態時執行的就是run()方法,而無論在程序的任何地方都不能顯式地調用run()方法。
這兩種創建線程的方法其實都需要用到Thread類,區別在于第一種方法先定義一個Thread類的子類,然后在這個子類中實現run()方法,而第二種方法用戶先定義一個實現了Runnable接口的類,然后再創建這個自定義類的對象,并把它作為參數傳遞給Thread類構造函數來創建Thread類對象。
此程序用實現Runnable接口的方法來實現多線程,也就是在定義MyTestThread類的首部申明實現Runnable接口:
public class MyTestThread extends JApplet implements ActionListener,Runnable
在類的內部編寫run()方法:
public void run()
{ 實現功能的各語句 }
創建烏龜和兔子線程:
t1=new Thread(this,\"Rabbit\");//創建兩個線程
t2=new Thread(this,\"Tortoise\");
啟動線程,使其進入就緒狀態
t1.start();//啟動線程
t2.start();
3.3 兔子休息現實的模擬
兔子每跑8分鐘就休息24分鐘,程序通過兔子跑過的路程與24取模判斷是否跑了8分鐘,如果是,讓兔子線程調用sleep()方法,睡眠指定的時間。
if(rab_road%24==0)
{//兔子每跑24米就休息一次
try{
Thread.currentThread().sleep(sleeptime);
}//兔子線程睡眠,表示兔子休息不前進
catch(InterruptedException ee){}
rab_time+=sleeptime/1000;//計時器把兔子休息時間加上
}
3.4 線程的結束控制
跑完總路程,線程正常結束。
設置循環控制標志
boolean tostop=1;//線程結束標志
while(!tostop) { … }
結束條件滿足時,修改控制標志
if(rab_road==60)
{//如果跑到終點
lab3.setText(\"兔子總用時:\"+rab_time+\"秒\");//顯示兔子前進信息
tostop=true;//修改循環控制標志,結束線程
}
或者:
if(tor_road==60)
{//如果烏龜到達終點
lab4.setText(\"烏龜總用時:\"+tor_time+\"秒\");
tostop=true;
}
4 結束語
本文介紹的方法,利用JAVA程序設計語言的多線程技術,將龜兔賽跑的寓言故事很好地再現了,將其作為JAVA多線程技術的教學載體,一方面很好地將技術的使用融入到問題的解決過程中,另一方面這樣的應用需求容易激發學生的學習興趣,增強學生的成就感,可以說是一個很成功的教學案例,對課程案例教學有很好的參考價值。
參考文獻:
[1] 蔣峰.Java多線程編程中線程生存期和優先級的探討[J].計算機工程與設計,2004(5):37.
[2] 莫禮平,張兆海.基于Java中流式Socket并行通信的編程實現[J].電腦學習,2004(5):22.
[3] 封瑋,周世平.Java中的線程池及實現[J].計算機系統應用,2004(8):18-20.
[4] 張云苑.Java多線程并發技術的實現[J].電腦開發與應用,2004(9):46.