JAVA應(yīng)用23--5.28_第1頁(yè)
JAVA應(yīng)用23--5.28_第2頁(yè)
JAVA應(yīng)用23--5.28_第3頁(yè)
JAVA應(yīng)用23--5.28_第4頁(yè)
JAVA應(yīng)用23--5.28_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) 1、實(shí)現(xiàn)線程的方法主要有哪兩種? 2、簡(jiǎn)述java.lang.Thread 類中定義的五個(gè)方法:run()、 start() 、stop() 、suspend() 、resume() 的作用?宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) 線程組的基本知識(shí)線程組的基本知識(shí) 多線程的應(yīng)用多線程的應(yīng)用 宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) 通常,一個(gè)程序可能包含若干線程,如何來(lái)管理這些線程呢?

2、Java語(yǔ)言提供了線程組,線程組可以同時(shí)控制一組線程。實(shí)際上,線程組就是一種可以管理一組線程的類。宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) 可以用構(gòu)造方法ThreadGroup()來(lái)構(gòu)造一個(gè)線程組,如下所示: String grounName = ; ThreadGroup g = new ThreadGroup(groupName); ThreadGroup()方法的參數(shù)表示一個(gè)線程組,因此該串參數(shù)必須是惟一的。 也可以用Thread類的構(gòu)造方法往一個(gè)指定的線程組里添加新的線程: Thread t = new Thread(g, threadName);宜賓職

3、業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) activeCount()方法用于檢測(cè)某個(gè)指定線程組是否有線程處于活動(dòng)狀態(tài): if (g.activeCount() = = 0) / 線程g的所有線程都已停止 要中斷一個(gè)線程組中的所有線程,可以調(diào)用 ThreadGroup類的方法interrupt(): errupt(); 線程組可以嵌套,即線程組可以擁有子線程組。缺省時(shí),一個(gè)新創(chuàng)建的線程或線程組都屬于當(dāng)前線程組所屬的線程組。宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)1、synchronized的基本概念 關(guān)鍵字synchronize

4、d提供Java編程語(yǔ)言一種機(jī)制,允許程序員控制共享數(shù)據(jù)的線程。 我們知道,進(jìn)程允許兩個(gè)或者更多個(gè)線程同時(shí)執(zhí)行。這些線程也可以共享對(duì)象和數(shù)據(jù),但在這種情形下,不同的線程在同一時(shí)間內(nèi)不能存取同一數(shù)據(jù),這是因?yàn)樵陂_(kāi)始設(shè)計(jì)Java的時(shí)候,就采用了線程的概念。 宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) J a v a 語(yǔ) 言 定 義 了 一 個(gè) 特 殊 的 關(guān) 鍵 字synchronized(同步),該關(guān)鍵字可以應(yīng)用到代碼塊上。該關(guān)鍵字的目的是防止多個(gè)線程在同一時(shí)間執(zhí)行同一代碼塊內(nèi)的代碼。 定義一個(gè)同步方法的格式如下: public|private synchronize

5、d type methodname(.) 宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)2、多線程的控制 線程有兩個(gè)缺陷:死鎖和饑餓。 所謂死鎖,就是一個(gè)或者多個(gè)線程,在一個(gè)給定的任務(wù)中,協(xié)同作用,互相干涉,從而導(dǎo)致一個(gè)或者更多線程永遠(yuǎn)等待下去。與此類似,所謂饑餓,就是一個(gè)線程永久性地占有資源,使得其他線程得不到該資源。宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) 首先我們看一下死鎖的問(wèn)題。一個(gè)簡(jiǎn)單的例子就是:你到ATM機(jī)上取錢,卻看到如下的信息“現(xiàn)在沒(méi)有現(xiàn)金,請(qǐng)等會(huì)兒再試?!?,你需要錢,所以你就等了一會(huì)兒再試,但是你又看到了同樣的信息;與

6、此同時(shí),在你后面,一輛運(yùn)款車正等待著把錢放進(jìn)ATM機(jī)中,但是運(yùn)款車到不了ATM取款機(jī),因?yàn)槟愕钠嚀踔馈T谶@種情況下,就發(fā)生了所謂的死鎖。宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)導(dǎo)致死鎖的發(fā)生: 相互排斥:一個(gè)線程或者進(jìn)程永遠(yuǎn)占有一共享資源,例如,獨(dú)占該資源。 循環(huán)等待:進(jìn)程A等待進(jìn)程B,而后者又在等待進(jìn)程C,而進(jìn)程C又在等待進(jìn)程A。 部分分配:資源被部分分配。例如,進(jìn)程A和B都需要訪問(wèn)一個(gè)文件,并且都要用到打印機(jī),進(jìn)程A獲得了文件資源,進(jìn)程B獲得了打印機(jī)資源。 缺少優(yōu)先權(quán):一個(gè)進(jìn)程訪問(wèn)了某個(gè)資源,但是一直不釋放該資源,至使該進(jìn)程處于阻塞狀態(tài)。宜賓職業(yè)技術(shù)學(xué)院

7、計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) 為了避免出現(xiàn)死鎖的情況,就必須在多線程程序中做同步管理。 java.lang.Object類中提供了兩個(gè)用于線程通信的方法:wait()和notify()。 為了讓線程對(duì)一個(gè)對(duì)象調(diào)用wait()或notify(),線程必須鎖定那個(gè)特定的對(duì)象。也就是說(shuō),只能在它們被調(diào)用的實(shí)例的同步塊內(nèi)使用wait()和notify()。當(dāng)某個(gè)線程執(zhí)行包含對(duì)一個(gè)特定對(duì)象執(zhí)行wait()調(diào)用的同步代碼時(shí),這個(gè)線程就被放到與那個(gè)對(duì)象相關(guān)的等待池中。調(diào)用wait()的線程自動(dòng)釋放對(duì)象的鎖標(biāo)志。宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專

8、業(yè) 對(duì)一個(gè)特定對(duì)象執(zhí)行notify()調(diào)用時(shí),將從對(duì)象的等待池中移走一個(gè)任意的線程,并放到鎖池中。鎖池中的對(duì)象一直在等待,直到可以獲得對(duì)象的鎖標(biāo)記。notifyAll()方法將從等待池中移走所有等待那個(gè)對(duì)象的線程,并把它們放到鎖池中。只有鎖池中的線程能獲取對(duì)象的鎖標(biāo)記,鎖標(biāo)記允許線程從上次因調(diào)用wait()而中斷的地方開(kāi)始繼續(xù)運(yùn)行。宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) 多線程之間的通信多線程之間的通信 Java 語(yǔ)言提供了各種各樣的輸入/輸出流,使我們能夠很方便地對(duì)數(shù)據(jù)進(jìn)行操作。其中,管道(Pipe)流是一種特殊的流,用于在不同線程間直接傳送數(shù)據(jù)(一個(gè)線程發(fā)送數(shù)據(jù)到輸出管道,另一個(gè)線程從輸入管道中讀數(shù)據(jù))。宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè)宜賓職業(yè)技術(shù)學(xué)院計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)專業(yè) Java提供了兩個(gè)特殊的、專門的類用于處理管道,它們就是PipedInputStream類和PipedOutputStream類。 PipedInputStream代表了數(shù)據(jù)在管道中的輸出端,也就是線程向管道讀數(shù)據(jù)的一端; PipedOutputStream代表了數(shù)據(jù)在管道中的輸入端,也就是線程向管道寫(xiě)數(shù)據(jù)的一端,這兩個(gè)類一起使用可以提供數(shù)據(jù)的管道

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論