<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進(jìn)步

     

    多線程使用示例1

    12.3 多線程使用示例

             多線程技術(shù)對于初學(xué)者來說,是編程思維的一種跳躍,在實(shí)際學(xué)習(xí)時(shí),一定要熟悉線程的基礎(chǔ)知識,掌握線程的實(shí)現(xiàn)方式,然后就是開始大量的進(jìn)行實(shí)踐,從實(shí)踐中領(lǐng)悟線程編程的奧妙以及實(shí)現(xiàn)的原理。

             下面通過幾個常見的例子演示多線程的基本使用。

    12.3.1 定時(shí)炸彈

             定時(shí)炸彈是在電影中常見的一種裝置,在該部分就使用多線程技術(shù)模擬該功能。實(shí)現(xiàn)的功能為:在程序啟動以后進(jìn)行倒計(jì)時(shí),當(dāng)60秒以后程序結(jié)束,在程序運(yùn)行時(shí)可以在控制臺輸入quit控制線程(炸彈)的暫停。

             在該示例程序中,開啟了一個系統(tǒng)線程(main方法所在的線程),該線程的作用是啟動模擬定時(shí)炸彈的線程,并且在控制臺接受用戶的輸入,并判斷輸入的內(nèi)容是否為quit,如果是則結(jié)束模擬定時(shí)炸彈的線程,程序結(jié)束。

             首先來看一下使用繼承Thread類的方式實(shí)現(xiàn)多線程時(shí)的代碼示例,代碼如下:

                       package example1;

    import java.io.*;

    /**

     * 模擬定時(shí)炸彈線程

     */

    public class TestTimeBomb1 {

             public static void main(String[] args) {

                       //創(chuàng)建線程和啟動線程

                       TimeBombThread tbt = new TimeBombThread();

                       //接受控制臺輸入

                       BufferedReader br = new BufferedReader(

                                                   new InputStreamReader(System.in));

                       String line;

                       try{

                                while(true){

                                         System.out.println("輸入quit結(jié)束線程:");

                                         //獲得控制臺輸入

                                         line = br.readLine();

                                         //判斷是否是quit

                                         if(line.equals("quit")){

                                                   tbt.stopThread(); //結(jié)束線程

                                                   break; //結(jié)束循環(huán)

                                         }

                                }

                       }catch(Exception e){}

             }

    }

                       package example1;

    /**

     * 使用繼承Thread類的方式模擬定時(shí)炸彈邏輯

     */

    public class TimeBombThread extends Thread {

             int n;

             boolean isRun;

             public TimeBombThread(){

                       n = 60;

                       isRun = true;

                       start();//啟動線程

             }

            

             public void run(){

                       try{

                                while(isRun){

                                         Thread.sleep(1000); //延遲1

                                         System.out.println("剩余時(shí)間:" + n);

                                         if(n <= 0){

                                                   isRun = false; //結(jié)束線程

                                                   System.out.println("炸彈爆炸!");

                                                   break;

                                         }

                                         n--; //時(shí)間減少1

                                }

                       }catch(Exception e){}

             }

            

             public void stopThread(){

                       isRun = false;

             }

    }

             在該示例代碼中,TestTimeBomb1類中包含的是系統(tǒng)線程,在系統(tǒng)線程中啟動模擬定時(shí)炸彈的TimeBombThread線程,然后在TestTimeBomb1中接收用戶的控制臺輸入,如果輸入的內(nèi)容是quit則結(jié)束線程,程序結(jié)束,否則忽略用戶的輸入,繼續(xù)等待用戶輸入。按照前面介紹的IO知識,在接收控制臺輸入時(shí)readLine是阻塞方法,也就是該方法在未獲得用戶輸入時(shí)會阻塞系統(tǒng)線程的執(zhí)行,使系統(tǒng)線程進(jìn)入到等待狀態(tài),等待用戶輸入。而TimeBombThread實(shí)現(xiàn)的邏輯是每隔1秒鐘減少一次數(shù)值,并輸出剩余時(shí)間,當(dāng)剩余時(shí)間為零時(shí),結(jié)束TimeBombThread線程。這樣兩個線程就同時(shí)工作了,系統(tǒng)線程等待用戶輸入的同時(shí),模擬定時(shí)炸彈的線程繼續(xù)執(zhí)行,這樣程序中就包含了兩個同時(shí)執(zhí)行的流程。

             在這里需要特別說明的是,如何控制線程的結(jié)束?在本程序中,使用的是讓線程自然死亡的方式,在實(shí)際控制線程時(shí),當(dāng)線程的run方法執(zhí)行結(jié)束則線程自然死亡,所以在本程序中通過控制isRun變量使得線程可以自然結(jié)束,從而釋放線程占用的資源。

             同樣的功能也可以使用TimerTimerTask組合的方式實(shí)現(xiàn),實(shí)現(xiàn)的代碼如下所示:

                       package example1;

    import java.io.*;

    /**

     * 模擬定時(shí)炸彈線程

     */

    public class TestTimeBomb2 {

             public static void main(String[] args) {

                       //創(chuàng)建線程和啟動線程

                       TimeBombTimerTask tbtt = new TimeBombTimerTask();

                       //接受控制臺輸入

                       BufferedReader br = new BufferedReader(

                                                   new InputStreamReader(System.in));

                       String line;

                       try{

                                while(true){

                                         System.out.println("輸入quit結(jié)束線程:");

                                         //獲得控制臺輸入

                                         line = br.readLine();

                                         //判斷是否是quit

                                         if(line.equals("quit")){

                                                   tbtt.stopThread(); //結(jié)束線程

                                                   break; //結(jié)束循環(huán)

                                         }

                                }

                       }catch(Exception e){}

             }

    }

    package example1;

    import java.util.*;

    /**

     * 使用TimerTimerTask組合模擬定時(shí)炸彈

     */

    public class TimeBombTimerTask extends TimerTask {

             int n;

             Timer t;

             boolean isRun;

             public TimeBombTimerTask(){

                       n = 60;

                       isRun = true;

                       t = new Timer();

                       t.schedule(this, 0); //啟動線程

             }

            

             public void run() {

                       try{

                                while(isRun){

                                         Thread.sleep(1000); //延遲1

                                         System.out.println("剩余時(shí)間:" + n);

                                         if(n <= 0){

                                                   stopThread(); //結(jié)束線程

                                                   System.out.println("炸彈爆炸!");

                                                   break;        //結(jié)束循環(huán)

                                         }

                                         n--; //時(shí)間減少1

                                }

                       }catch(Exception e){}

             }

            

             public void stopThread(){

                       isRun = false;

                       t.cancel();

             }

    }

             在該示例代碼中,實(shí)現(xiàn)的原理和前面的類似,TestTimeBomb2類實(shí)現(xiàn)系統(tǒng)線程,功能是啟動模擬定時(shí)炸彈的線程,并接收用戶的控制臺輸入。而TimeBombTimerTask類實(shí)現(xiàn)模擬定時(shí)炸彈的線程,在該類內(nèi)部包含啟動線程的Timer對象,當(dāng)構(gòu)造該類的對象時(shí),不僅完成該類的初始化,而且啟動線程。

             在控制Timer啟動的線程結(jié)束時(shí),首先結(jié)束當(dāng)前的TimerTask線程,然后再調(diào)用Timer對象的cancel方法結(jié)束Timer對象的線程,這樣才可以真正停止這種方式啟動的線程。

             至于使用實(shí)現(xiàn)Runnable方式實(shí)現(xiàn)線程的方式,和繼承Thread類的實(shí)現(xiàn)幾乎一致,讀者可以根據(jù)第一種方式的實(shí)現(xiàn)獨(dú)自進(jìn)行實(shí)現(xiàn),這里就不再重復(fù)實(shí)現(xiàn)了。

    posted on 2009-06-15 13:22 找個美女做老婆 閱讀(464) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人毛片免费观看视频大全| 日本免费A级毛一片| 黄页网站在线观看免费高清| 91情国产l精品国产亚洲区| 国产精品免费观看调教网| 久久精品视频亚洲| 久久成人免费电影| 亚洲成人福利在线| 中文字幕无码成人免费视频| 在线观看日本亚洲一区| 日本免费一区尤物| 精品在线免费视频| 在线观看亚洲精品国产| 久久国产精品免费专区| 亚洲最大的视频网站| 好吊妞在线成人免费| 婷婷国产偷v国产偷v亚洲| 亚洲天堂中文字幕在线| 久久免费精品一区二区| 亚洲成av人片在线看片| 日韩免费毛片视频| 一级毛片不卡免费看老司机| 亚洲va久久久噜噜噜久久狠狠 | 疯狂做受xxxx高潮视频免费| 久久久精品国产亚洲成人满18免费网站 | 最好看的中文字幕2019免费| 国产成人精品日本亚洲专一区| 99精品全国免费观看视频 | 亚洲小视频在线观看| 最近中文字幕无免费视频| 美女视频黄a视频全免费网站一区| 在线观看午夜亚洲一区| 99久久99这里只有免费费精品| 久久精品国产亚洲AV天海翼| 亚洲精品夜夜夜妓女网| 最近中文字幕无免费视频| 国产精品九九久久免费视频| 亚洲人和日本人jizz| 亚洲午夜成人精品电影在线观看| 91精品国产免费| 免费精品国自产拍在线播放|