freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

面向?qū)ο蟮某绦蛟O計-java張白一第三版第13章-資料下載頁

2025-06-17 12:44本頁面
  

【正文】 用關鍵字“ synchronized”來標注,并通過一個稱為監(jiān)控器的系統(tǒng)軟件來管理的。當執(zhí)行被冠以 synchronized的程序段即臨界區(qū)程序時,監(jiān)控器將這段程序 (訪問的臨界資源 )加鎖,此時,稱該線程占有臨界資源,直到這段程序執(zhí)行完,才釋放鎖。只有鎖被釋放后,其他線程才可以訪問這些臨界資源。用關鍵字 synchronized定義臨界區(qū)的語句形式是: synchronized (expression) statement 其中, expression代表類的名字,是可選項; statement可以是一個方法,也可以是一個語句或一個語句塊,最常見的是一個方法。下面通過一個例子來說明線程的同步問題。 第 13章 多線程 ?【 示例程序 】 生產(chǎn)者與消費者的同步問題。 public class C13_4 { public static void main(String [?] args) { HoldInt h=new HoldInt(?)。 //h為監(jiān)控器 ProduceInt p=new ProduceInt(h)。 ConsumeInt c=new ConsumeInt(h)。 (?)。 (?)。 } } 第 13章 多線程 class HoldInt { private int sharedInt。 private boolean writeAble=true。 //writeAble=true表示生產(chǎn)者線程能生產(chǎn)新數(shù)據(jù) public synchronized void set(int val) //臨界區(qū)程序段,也稱為同步方法 { while(!writeAble) { //生產(chǎn)者線程不能生產(chǎn)新數(shù)據(jù)時進入等待 try {wait(?)。} catch(InterruptedException e){} } //生產(chǎn)者被喚醒后繼續(xù)執(zhí)行下面的語句 writeAble=false。 sharedInt=val。 notify(?)。 } 第 13章 多線程 public synchronized int get(?) //同步方法 { while(writeAble) { //消費者線程不能消費數(shù)據(jù)時進入等待狀態(tài) try { wait(?)。 } catch(InterruptedException e){} } //消費者被喚醒后繼續(xù)執(zhí)行下面的語句 writeAble=true。 notify(?)。 return sharedInt。 } } 第 13章 多線程 //ProduceInt 是生產(chǎn)者線程 class ProduceInt extends Thread { private HoldInt hi。 public ProduceInt(HoldInt hiForm) { hi=hiForm。 } public void run( ) { for(int i=1。i=4。i++) { (i)。 (產(chǎn)生的新數(shù)據(jù)是 : + i)。 } } } 第 13章 多線程 //ConsumeInt 是消費者線程 class ConsumeInt extends Thread { private HoldInt hi。 public ConsumeInt(HoldInt hiForm) { hi=hiForm。 } public void run( ) { for(int i=1。i=4。i++) { int val=(?)。 (讀到的數(shù)據(jù)是 : + val)。 } } } 第 13章 多線程 在這個程序中, ?共享數(shù)據(jù) sharedInt的方法 set(?)和 get(?)頭部的修飾符 synchronized使 HoldInt的每個對象都有一把鎖。當 ProduceInt對象調(diào)用 set(?)方法時, HoldInt對象就被鎖定。當 set(?)方法中的數(shù)據(jù)成員 writeAble值為 true時, set(?)方法就可以向數(shù)據(jù)成員 sharedInt中寫入一個值,而 get(?)方法不能從sharedInt上讀出值。如果 set(?)方法中的 writeAble的值為 false,則調(diào)用 set(?)方法中的 wait(?)方法,把調(diào)用 set(?)方法的ProduceInt對象放到 HoldInt對象的等待隊列中,并將 HoldInt對象的鎖打開,使該對象的其他 synchronized方法可被調(diào)用。這個 ProduceInt對象將一直在等待隊列中等待,直到被喚醒使它進入就緒狀態(tài),等待分配 CPU。當 ProduceInt 第 13章 多線程 對象再次進入運行狀態(tài)時, HoldInt對象就被隱含地鎖定,而 set(?)方法將繼續(xù)執(zhí)行 while循環(huán)中 wait(?)方法后面的語句。在本例中, wait(?)方法后面無其他語句,因此將進入下一次循環(huán),判斷 while條件。 ConsumeInt對象調(diào)用 get(?)方法的情況與 ProduceInt對象調(diào)用 set(?)方法的情況類似,這里不再贅述。 第 13章 多線程 該程序的運行結果如下: 產(chǎn)生的新數(shù)據(jù)是 : 1 讀到的數(shù)據(jù)是 : 1 產(chǎn)生的新數(shù)據(jù)是 : 2 讀到的數(shù)據(jù)是 : 2 產(chǎn)生的新數(shù)據(jù)是 : 3 產(chǎn)生的新數(shù)據(jù)是 : 4 讀到的數(shù)據(jù)是 : 3 讀到的數(shù)據(jù)是 : 4 第 13章 多線程 線程組 Java系統(tǒng)的每個線程都屬于某一個線程組。采用線程組結構以后,可以對多個線程進行集中管理。比如,可以同時啟動、掛起或者終止一個線程組中的全部線程。 Java系統(tǒng)專門在 ThreadGroup類來實現(xiàn)對線程組的管理功能。 第 13章 多線程 大多數(shù)情況下,一個線程屬于哪個線程組是由編程人員在程序中指定的,若編程人員沒有指定,則 Java系統(tǒng)會自動將這些線程歸于“ main”線程組。 main線程組是 Java系統(tǒng)啟動時創(chuàng)建的。一個線程組不僅可以包含多個線程,而且線程組中還可以包含其他的線程組,構成樹形結構。一個線程可以訪問本線程組的有關信息,但無法訪問本線程組的父線程組。有關線程組的更詳細的內(nèi)容請查閱 Java手冊,本書不再贅述。
點擊復制文檔內(nèi)容
教學教案相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1