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

正文內(nèi)容

第七講多線程(參考版)

2024-09-04 21:49本頁(yè)面
  

【正文】 8. wait和 notify起協(xié)調(diào)作用。 6. 兩個(gè)或多個(gè)線程競(jìng)爭(zhēng)資源時(shí),需要用同步的方法協(xié)調(diào)資源。 4. 在 Applet中通常在其 start()方法中創(chuàng)建線程,在 stop()方法中終止線程。 ? 一般當(dāng)最后一個(gè)線程結(jié)束時(shí), Java程序才退出 ? 守護(hù)線程的存在不影響 Java程序的退出 ? setDaemon(true) ? 使線程成為守護(hù)線程(必須在 start之前調(diào)用) ? setDaemon(false) ? 使線程成為一般線程(必須在 start之前調(diào)用) ? 守護(hù)線程一般不能用于執(zhí)行關(guān)鍵任務(wù) ? 任務(wù)未執(zhí)行完,線程就可能被強(qiáng)制結(jié)束 ? 守護(hù)線程一般用來(lái)做輔助性工作 ? 提示,幫助等 守護(hù)線程 (Daemon) 線程組 (ThreadGroup) ? 把一組線程統(tǒng)一管理 ? 例如對(duì)一組線程同時(shí)調(diào)用 interrupt ? 構(gòu)造方法 ? ThreadGroup(String groupName) ? ThreadGroup(ThreadGroup tg, String groupName) ? 線程組可以遞歸 ? 聲明線程的線程組 ? 缺省創(chuàng)建的線程與父線程同組 ? Thread(ThreadGroup tg, Runnable ro) ? Thread(ThreadGroup tg, Runnable ro, String threadName) ThreadGroup0 ThreadGroup1 ThreadGroup2 Thread Thread 線程組 (ThreadGroup) ? int activeCount() ? 線程組下的所有活動(dòng)線程數(shù)(遞歸) ? int enumerate(Thread[] list[, boolean recursive]) int enumerate(ThreadGroup[] list[, boolean recursive]) ? 線程組下的所有活動(dòng)線程數(shù)(遞歸) ? getMaxProirity / setmaxProirity ? 獲得 / 設(shè)置 線程組中線程的最大優(yōu)先級(jí) ? getName ? 獲得線程組的名字 ? getParent / parentOf ? 獲得 / 判斷 線程父子關(guān)系 線程組 (ThreadGroup) 小結(jié) 1. 實(shí)現(xiàn)線程有兩種方法: ? 實(shí)現(xiàn) Ruannable接口 ? 繼承 Thread類 2. 當(dāng)新線程被啟動(dòng)時(shí), Java運(yùn)行系統(tǒng)調(diào)用該線程的 run()方法,它是 Thread的核心。 可以用方法 public boolean isDaemon()確定一個(gè)線程是否守護(hù)線程,也可以用方法 public void setDaemon( boolean )來(lái)設(shè)定一個(gè)線程為守護(hù)線程。 線程 2 pen 線程 1 note 把“ pen”給我 ,我 才能給你“ note” 把“ note”給我 ,我 才能給你“ pen” 多線程的互斥與同步 —— 死鎖問(wèn)題 守護(hù)線程 (Daemon) 在客戶 /服務(wù)器模式下,服務(wù)器的作用是持續(xù)等待用戶發(fā)來(lái)請(qǐng)求,并按請(qǐng)求完成客戶的工作。 死鎖是資源的無(wú)序使用而帶來(lái)得,解決死鎖問(wèn)題的方法就是給資源施加排序。 put()方法在寫信息之前先等待,直到信息被取走,寫完后通知要讀的進(jìn)程。 notify()。 // waits for notify() call from consumer }catch (InterruptedException e){ } } seq = value。 return seq。 // waits for notify() call from Producer }catch (InterruptedException e){ } } available = false。 private boolean available = false。 (Consumer + + got: + value)。 i 10。 } public void run() { int value = 0。 public Consumer(CubbyHole c, int number) { cubbyhole = c。 } catch (InterruptedException e) { } } } } class Consumer extends Thread { private CubbyHole cubbyhole。 (Producer + + put: + i)。 i 10。 = number。 private int number。 ()。 ()。 //資源生產(chǎn)者 Consumer c1 = new Consumer(c, 1)。 多線程的互斥與同步 —— 線程間的同步 public class ProducerConsumerTest { public static void main(String args[]) { CubbyHole c = new CubbyHole()。 wait()方法的作用是讓當(dāng)前線程釋放其所持有的 “ 對(duì)象互斥鎖 ” ,進(jìn)入 wait隊(duì)列( 等待隊(duì)列);而 notify()/notifyAll()方法的作用是喚醒一個(gè)或所有正在等待隊(duì)列中等待的線程,并將它(們)移入等待同一個(gè) “ 對(duì)象互斥鎖 ” 的隊(duì)列。 典型的模型: 生產(chǎn)者 —— 消費(fèi)者問(wèn)題 多線程的互斥與同步 —— 線程間的同步 生產(chǎn)者 消費(fèi)者 共享對(duì)象 put get 若共享對(duì)象中只能存放一個(gè)數(shù)據(jù),可能出現(xiàn)以下問(wèn)題 : ? 生產(chǎn)者比消費(fèi)者快時(shí),消費(fèi)者會(huì)漏掉一些數(shù)據(jù)沒(méi)有取到; ? 消費(fèi)者比生產(chǎn)者快時(shí),消費(fèi)者取相同的數(shù)據(jù)。 一般情況下,都使用 synchronized關(guān)鍵字在方法的層次上實(shí)現(xiàn)對(duì)共享資源操作的同步,很少使用 volatile關(guān)鍵字聲明共享變量。 } } public char pop() { … } } 多線程的互斥與同步 —— 線程間的資源互斥共享 用 synchronized來(lái)標(biāo)識(shí)的代碼段或方法即為 “ 對(duì)象互斥鎖 ” 鎖住的部分。 } } class stack{ … public void push(char c) { synchronized(this){ data[index] = c。 return true。 } } class bank { static volatile double balance。 } public synchronized char pop() { index。 public synchronized void push(char c) { data[index] = c。 多線程的互斥與同步 —— 線程間的資源互斥共享 class stack{ int index = 0。 “ 對(duì)象互斥鎖 ” 阻止多個(gè)線程同時(shí)訪問(wèn)同一個(gè)條件變量。為了解決這種問(wèn)題,需要尋找一種機(jī)制來(lái)保證對(duì)共享數(shù)據(jù)操作的完整性,這種完整性稱為 共享數(shù)據(jù)操作的同步 ,共享數(shù)據(jù)叫做 條件變量 。 } else return false。 public boolean 取錢 (double amount) { if(balance = amount ) { bala
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1