亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

試題

計(jì)算機(jī)二級(jí)考試JAVA基礎(chǔ)知識(shí):線程

時(shí)間:2024-10-04 19:06:33 試題 我要投稿
  • 相關(guān)推薦

計(jì)算機(jī)二級(jí)考試JAVA基礎(chǔ)知識(shí):線程

  1 理解線程

計(jì)算機(jī)二級(jí)考試JAVA基礎(chǔ)知識(shí):線程

  許多程序,無論大小,都包含或多或少獨(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)畫程序。

  2 管理線程

  在這章的兩個(gè)例子中我們看到,線程被啟動(dòng),然后競(jìng)爭(zhēng)計(jì)算機(jī)資源。因?yàn)槿齻(gè)線程對(duì)處理器的竟?fàn)幉捎貌皇芸刂频姆椒,所以線程的輸出次序混亂。在程序中通常這是不希望看到的。在絕大多數(shù)使用線程的例子中,線程執(zhí)行的方法需要被管理才能使線程彼此不產(chǎn)生沖突。

  當(dāng)然,在我們的例子中,程序被故意構(gòu)造成通過輸出一個(gè)名字中途釋放處理器的控制。

  雖然這是非常做作的,但類似情況也會(huì)在現(xiàn)實(shí)中出現(xiàn),特別是在重復(fù)操作的線程中出現(xiàn)。能夠認(rèn)識(shí)到當(dāng)一個(gè)原始語句執(zhí)行時(shí)一個(gè)線程能被中斷是很重要的。例如:假設(shè)一個(gè)線程執(zhí)行語句:

  i=i+1

  在這個(gè)語句仍在執(zhí)行時(shí),線程的執(zhí)行被中斷是極有可能的,也許存i值被取來增1之后,但在結(jié)果被存回i之前。沒有適當(dāng)控制,另一個(gè)訪問i的線程會(huì)在這一時(shí)刻改變i的值:結(jié)果是在這個(gè)線程中i沒有增1.

  兩個(gè)或多個(gè)線程分享一個(gè)公用資源的地方,如文件或內(nèi)存塊,你需要決策確保一個(gè)線程不能修改另一個(gè)線程正在使用的資源。當(dāng)一木線程更新文件中的一個(gè)記錄時(shí)而另一個(gè)線程中途檢索同一個(gè)記錄是帶來災(zāi)難的方法。管理這種情況的一個(gè)方法是使用線程中包含的同步(synchronization)

  同步

  同步的目標(biāo)是當(dāng)幾個(gè)線程想訪問同一個(gè)資源時(shí),確保在仟何指定時(shí)刻只能有一個(gè)線程訪問它。用同步管理你的線程執(zhí)行有兩種方法;

  在方法一級(jí)管理代碼,包括同步方法

  在塊一級(jí)管理代碼一使用同步塊

  首先我們看看怎么使用同步方法。

  3 線程優(yōu)先級(jí)

  所有的線程都有一個(gè)優(yōu)先級(jí),當(dāng)幾個(gè)線程正等待機(jī)會(huì)時(shí)決定應(yīng)該執(zhí)行哪個(gè)。這使得可能一個(gè)線程可以比另一個(gè)得到更多的對(duì)處理器資源的訪問。讓我們考慮一個(gè)如何使用優(yōu)先級(jí)的基本例子。假設(shè)你有一個(gè)某程序中的線程,該程序需要所有的處理器資源--某些又難又長(zhǎng)的計(jì)算。另一些線程需要的資源相對(duì)較少。通過將需要所有資源的線程設(shè)置成低優(yōu)先級(jí),你可以確保其他的線程可以立即執(zhí)行,而被線程約束的處理器在其他線程輪流處理之后剩下的處理周期處理該線程。

  private list inTray Collections.synsnonizedl.ist(new LinkedList());

  private int maxTransactions //Max transaction in the intray

  注意我們從構(gòu)造函數(shù)中刪除了將inTray初始化成null的語句:現(xiàn)在我們是針對(duì)一個(gè)表,我們必須改寫Clerk類中的doTransaction方法只要表中交易數(shù)少于MaxTransactions,就向表中存儲(chǔ)交易。這里被修改的代碼如下:

  while(inTray.size()>=maxTrarsactions)

  Try

  {

  wail();

  system.io println;

  {

  inTray.add)transaction);

  表的size()方法返回表中包含的對(duì)象個(gè)數(shù),因此檢查這個(gè)是件無關(guān)緊要的事。我們使用add()方法在表尾添加一個(gè)新的Transaction對(duì)象。

  職員調(diào)用run()方法從輸入托盤中檢索對(duì)象。因此為了處理表,我們必須更新該方法。

  線程是一個(gè)程序中的子任務(wù),可以并行執(zhí)行。

【計(jì)算機(jī)二級(jí)考試JAVA基礎(chǔ)知識(shí):線程】相關(guān)文章:

計(jì)算機(jī)二級(jí)考試java基礎(chǔ)知識(shí)10-19

計(jì)算機(jī)二級(jí)考試JAVA基礎(chǔ)知識(shí):組件和容器10-06

java多線程08-31

java的多線程09-09

計(jì)算機(jī)二級(jí)JAVA考試構(gòu)建JAVA程序201710-02

java語言的多線程08-29

java線程的幾種狀態(tài)10-22

Java線程編程中的主線程詳細(xì)介紹09-05

計(jì)算機(jī)二級(jí)考試Java試題及答案10-24

計(jì)算機(jī)二級(jí)考試JAVA模擬試題10-12