點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程章節(jié)匯總
點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程第十一章匯總
11.1 理解線程
許多程序,無論大小,都包含或多或少獨(dú)立于其他段的代碼段,如果代碼段可以在時(shí)間上并行執(zhí)行效率會(huì)更高。線程提供了這種方法。當(dāng)然,如果像大多數(shù)人一樣,你的計(jì)算機(jī)只有一個(gè)處理器,對(duì)任意時(shí)刻,你不能執(zhí)行多于一個(gè)的計(jì)算,但你可以并行地處理輸入/輸出操作。使用線程的另一個(gè)原因是在需要連續(xù)運(yùn)行的程序中允許同時(shí)處理程序中其他的活動(dòng),例如,在同一個(gè)程序中一個(gè)連續(xù)運(yùn)行的動(dòng)畫與另一個(gè)活動(dòng)并行。在web頁中 Java的小應(yīng)用程序在你的瀏覽器控制下執(zhí)行,線程使多個(gè)小應(yīng)用程序可以同時(shí)一執(zhí)行。在這種情況下,線程將在瀏覽器控制下運(yùn)行的程序分成段以便它好及時(shí)運(yùn)行。如果你只有一個(gè)處理器,你的操作系統(tǒng)會(huì)造成一個(gè)錯(cuò)覺,由于在任意一個(gè)給定的時(shí)刻只有一個(gè)線程可以執(zhí)行指令,但這是一個(gè)非常有效的錯(cuò)覺。為了產(chǎn)生動(dòng)畫,你可以將繪制一系列靜止畫面的代碼放入一個(gè)循環(huán)中:
通常繪制圖像的代碼在計(jì)時(shí)器的控制一下運(yùn)行,因此是在一個(gè)固定的速率下執(zhí)行,比方說每秒20次。當(dāng)然,當(dāng)循環(huán)運(yùn)行時(shí)同一個(gè)線程中不會(huì)發(fā)生其他的事。如果你想有另一個(gè)運(yùn)行的動(dòng)畫,它必須在一個(gè)獨(dú)立的線程中。然后你的操作系統(tǒng)多任務(wù)的能力允許兩個(gè)線程分一享有效的處理器時(shí)間,因此,允許兩個(gè)動(dòng)畫的運(yùn)行。在第16章我們將研究如何編寫動(dòng)畫程序。
讓我們先了解一下線程工作的原理�?紤]一個(gè)包含三個(gè)活動(dòng)的非常簡單的程序:
從文件中讀出許多數(shù)據(jù)塊。
在每個(gè)數(shù)據(jù)塊中執(zhí)行計(jì)算。
現(xiàn)在在線程間有不同種的競(jìng)爭(zhēng)。讀文件和寫結(jié)果都是在競(jìng)爭(zhēng),因此需要有種方法當(dāng)一個(gè)線程已在讀取輸入文件時(shí),阻止另一個(gè)線程從輸入文件中讀。對(duì)輸出文件同理。這個(gè)安排有另一個(gè)現(xiàn)象與前邊版本不同。如果一個(gè)線程(比方說是threadl)讀一個(gè)塊(也許是bloclc4 )需要許多時(shí)間計(jì)算結(jié)果,另一個(gè)線程(比方說是thread2 )可以想要讀下一個(gè)塊(可能是b1ock5 ),在thread 1為block4寫結(jié)果前,對(duì)block5計(jì)算和寫結(jié)果。在輸入的不同次序中如果你不想得到這個(gè)結(jié)果,你需要做點(diǎn)什么解決這個(gè)問題。在我們對(duì)確保線程不會(huì)沖突進(jìn)行研究前,讓我們先看看如何創(chuàng)建一個(gè)線程。
相關(guān)推薦:
2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程章節(jié)匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |