华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場(chǎng) | 考試論壇  
全國(guó)  |             |          |          |          |          |         
  當(dāng)前位置:計(jì)算機(jī)等級(jí) > 二級(jí)考試 > Java語言程序設(shè)計(jì) > 考試輔導(dǎo) > 文章內(nèi)容
  

計(jì)算機(jī)二級(jí)JAVA考點(diǎn)解析:多線程

中華IT學(xué)院   【 】  [ 2017年9月5日 ]

  7.1多線程的概念

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

  7.1.1Java線程的模型

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

  你得到一個(gè)線程的控制柄,你就可以作很有趣的事情,即使單線程也一樣。下面這個(gè)例子讓你知道怎樣操縱當(dāng)前線程。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啟動(dòng)接口

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

  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)建了一個(gè)Thread對(duì)象,通過傳遞第一個(gè)參數(shù)來標(biāo)明新線程來調(diào)用this對(duì)象的run函數(shù)。然后我們調(diào)用start函數(shù),它將使線程從run函數(shù)開始執(zhí)行。

首頁 1 2 3 4 尾頁
分享到:
本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請(qǐng)鏈接 | 意見留言 TOP
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
Copyright © 2006-2017 中華考試網(wǎng)(Examw.com) All Rights Reserved  營(yíng)業(yè)執(zhí)照
姜堰市| 中方县| 曲靖市| 金坛市| 和龙市| 河津市| 咸阳市| 三都| 喜德县| 鸡东县| 武威市| 龙川县| 抚松县| 延边| 葫芦岛市| 稻城县| 慈利县| 江安县| 浪卡子县| 建平县| 胶南市| 长葛市| 始兴县| 桓台县| 商都县| 冀州市| 广河县| 郸城县| 清徐县| 延长县| 南乐县| 河曲县| 兴山县| 淳安县| 元朗区| 仁寿县| 花莲市| 龙口市| 沾化县| 天全县| 沐川县|