亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁 | 考試用書 | 培訓課程 | 模擬考場 | 考試論壇  
      全國  |             |          |          |          |          |         
        當前位置:計算機等級 > 二級考試 > Java語言程序設計 > 考試輔導 > 文章內(nèi)容
        

      計算機二級JAVA考點解析:多線程

      中華IT學院   【 】  [ 2017年9月5日 ]

        7.1多線程的概念

        多線程編程的含義是你可將程序任務分成幾個并行的子任務。特別是在網(wǎng)絡編程中,你會發(fā)現(xiàn)很多功能是可以并發(fā)執(zhí)行的。比如網(wǎng)絡傳輸速度較慢,用戶輸入速度較慢,你可以用兩個獨立的線程去完成這?copy;功能,而不影響正常的顯示或其他功能。多線程是與單線程比較而言的,普通的WINDOWS采用單線程程序結(jié)構(gòu),其工作原理是:主程序有一個消息循環(huán),不斷從消息隊列中讀入消息來決定下一步所要干的事情,一般是一個子函數(shù),只有等這個子函數(shù)執(zhí)行完返回后,主程序才能接收另外的消息來執(zhí)行。比如子函數(shù)功能是在讀一個網(wǎng)絡數(shù)據(jù),或讀一個文件,只有等讀完這?copy;數(shù)據(jù)或文件才能接收下一個消息。在執(zhí)行這個子函數(shù)過程中你什么也不能干。但往往讀網(wǎng)絡數(shù)據(jù)和等待用戶輸入有很多時間處于等待狀態(tài),多線程利用這個特點將任務分成多個并發(fā)任務后,就可以解決這個問題。

        7.1.1Java線程的模型

        Java的設計思想是建立在當前大多數(shù)操作系統(tǒng)都實現(xiàn)了線程調(diào)度。Java虛擬機的很多任務都依賴線程調(diào)度,而且所有的類庫都是為多線程設計的。實時上,Java支持Macintosh和Ms-dos的平臺?reg;所以遲遲未出來就是因為這兩個平臺都不支持多線程。Java利用多線程實現(xiàn)了整個執(zhí)行環(huán)境是異步的。在Java程序里沒有主消息循環(huán)。如果一個線程等待讀取網(wǎng)絡數(shù)據(jù),它可以運行但不停止系統(tǒng)的其他線程執(zhí)行。用于處理用戶輸入的線程大多時間是等待用戶敲鍵盤或擊鼠標。你還可以使動畫的每一幀?reg;間停頓一秒而并不使系統(tǒng)暫停。一?copy;線程啟動后,它可以被掛起,暫時不讓它執(zhí)行。掛起的線程可以重新恢復執(zhí)行。任何時間線程都可以被停止,被停止的線程就不能再重新啟動。Java語言里,線程表現(xiàn)為線程類,線程類封裝了所有需要的線程操作控制。在你心里,必須很清晰地區(qū)分開線程對象和運行線程,你可以將線程對象看作是運行線程的控制面板。在線程對象里有很多函數(shù)來控制一個線程是否運行,睡眠,掛起或停止。線程類是控制線程行為的唯一的手段。一?copy;一個Java程序啟動后,就已經(jīng)有一個線程在運行。你可通過調(diào)用Thread.currentThread函數(shù)來查看當前運行的是哪一個線程。

        你得到一個線程的控制柄,你就可以作很有趣的事情,即使單線程也一樣。下面這個例子讓你知道怎樣操縱當前線程。Filename:testthread

        classtestthread{publicstaticvoidmain(Stringargs[]){Threadt

        =Thread.currentThread();t.setName(\"ThisThreadisrunning\");

        System.out.println(\"Therunningthread:\"+t);try{for(inti=0;i

        {System.out.println(\"Sleeptime\"+i);Thread.sleep(1000);}

        }catch(InterruptedExceptione){System.out.println(\"threadhaswrong\");}

        }}

        執(zhí)行結(jié)果:javatestthreadTherunningthread:Thread[ThisThreadisrunning,5,main]Sleeptime0Sleeptime1Sleeptime2Sleeptime3Sleeptime4

        7.1.2啟動接口

        一個線程并不激動人心,多個線程才有實際意義。我們怎樣創(chuàng)建更多的線程呢?我們需要創(chuàng)建線程類的另一個實例。當我們構(gòu)造了線程類的一個新的實例,我們必須告訴它在新的線程里應執(zhí)行哪一段程序。你可以在任意實現(xiàn)了啟動接口的對象上啟動一個線程。啟動接口是一個抽象接口,來表示本對象有一?copy;函數(shù)想異步執(zhí)行。要實現(xiàn)啟動接口,一個類只需要有一個叫run的函數(shù)。下面是創(chuàng)建一個新線程的例子:

        Filename:twothread.java

        classtwothreadimplementsRunnable{twothread(){Threadt1

        =Thread.currentThread();t1.setName(\"Thefirstmainthread\");

        System.out.println(\"Therunningthread:\"+t1);Threadt2=new

        Thread(this,\"thesecondthread\");System.out.println(\"creatanother

        thread\");t2.start();try{System.out.println(\"firstthreadwill

        sleep\");Thread.sleep(3000);}catch(InterruptedExceptione)

        {System.out.println(\"firstthreadhaswrong\");}

        System.out.println(\"firstthreadexit\");}publicvoidrun(){try{for

        (inti=0;i

        Thread.sleep(1000);}

        }catch(InterruptedExceptione){System.out.println(\"threadhas

        wrong\");}

        System.out.println(\"secondthreadexit\");}publicstaticvoid

        main(Stringargs[]){newtwothread();}}

        執(zhí)行結(jié)果:javatwothread

        Therunningthread:Thread[Thefirstmainthread,5,main]creatanother

        threadfirstthreadwillsleepSleeptimeforthread2:0Sleeptimefor

        thread2:1Sleeptimeforthread2:2firstthreadexitSleeptimefor

        thread2:3Sleeptimeforthread2:4secondthreadexit

        main線程用newThread(this,\"thesecondthread\")創(chuàng)建了一個Thread對象,通過傳遞第一個參數(shù)來標明新線程來調(diào)用this對象的run函數(shù)。然后我們調(diào)用start函數(shù),它將使線程從run函數(shù)開始執(zhí)行。

      首頁 1 2 3 4 尾頁
      分享到:
      本文糾錯】【告訴好友】【打印此文】【返回頂部
      將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動訪問考試網(wǎng) | 復制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
      關于本站  網(wǎng)站聲明  廣告服務  聯(lián)系方式  站內(nèi)導航  考試論壇
      Copyright © 2006-2017 中華考試網(wǎng)(Examw.com) All Rights Reserved  營業(yè)執(zhí)照