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

正文內容

第七講多線程-閱讀頁

2024-09-20 21:49本頁面
  

【正文】 m 輸出流 outStream 輸入流 inStream 線程 2 2. 通過一個中間類在線程間傳遞信息 線程 2 線程 1 中間類 m s s (s) s=() write() read() 多線程的互斥與同步 —— 線程間的通信 管道流可以連接兩個線程間的通信。 多線程的互斥與同步 —— 線程間的通信 主類 Pipethread 輔類myWriter 線 程 類 輔類 myReader 線 程 類 管 道 流 將數(shù)據(jù)寫到輸出流 從輸入流中讀數(shù)據(jù) 輸出流作為參數(shù) 傳給 myWriter 輸入流作為參數(shù) 傳給 myReader class myWriter extends Thread { private PipedOutputStream outStream。 public myWriter(PipedOutputStream o) { outStream = o。 for( int i = 0。 i++) { ( messages[i] )。 (Write: + messages[i] )。 p = null。 //從中讀數(shù)據(jù) public myReader(PipedInputStream i) { inStream = i。 DataInputStream d。 d = new DataInputStream( inStream )。amp。 if( line != null ) ( ”Read: + line )。 }catch( IOException e){} } try{ ().sleep( 4000 )。 ()。 PipedOutputStream outStream。 inStream = new PipedInputStream(outStream)。 new myReader( inStream ).start()。在這種時候,每個線程就必須要考慮其他與他一起共享數(shù)據(jù)的線程的狀態(tài)與行為,否則的話就不能保證共享數(shù)據(jù)的一致性,從而也就不能保證程序的正確性。 char[] data = new char[6]。 index++。 return data[index]。 多線程的互斥與同步 —— 線程間的資源互斥共享 線程 1 線程 2 線程 10 資源 取錢 1 取錢 2 透支 余額 變量 class bank { static double balance。 return true。 } } 多線程的互斥與同步 —— 線程間的資源互斥共享 產生這種問題的原因是對 共享資源 訪問的不完整。 在 Java語言中,引入了 “ 對象互斥鎖 ” 的概念(又稱為監(jiān)視器、管程)來實現(xiàn)不同線程對 共享數(shù)據(jù)操作的同步。 在 Java語言中,有兩種方法可以實現(xiàn) “ 對象互斥鎖 ” : ? 用關鍵字 volatile來聲明一個共享數(shù)據(jù)(變量); ? 用關鍵字 synchronized來聲明一個操作共享數(shù)據(jù)的方法 或 一段代碼 。 char[] data = new char[6]。 index++。 return data[index]。 public [syn… ] boolean 取錢 (double amt) { if(balance = amt ) { balance = amt。 } else return false。 index++。如果一個程序內有兩個或以上的方法使用 synchronized標志,則它們在同一個 “ 對象互斥鎖 ” 管理之下。 push pop 互 斥 鎖 線程 1 線程 2 多線程的互斥與同步 —— 線程間的資源互斥共享 除了要處理多線程間共享數(shù)據(jù)操作的同步問題之外,在進行多線程程序設計時,還會遇到另一類問題,這就是如何控制 相互交互的線程之間的運行進度 ,即 多線程的同步 。 為了解決所出現(xiàn)的問題,在 Java語言中可以用 wait () 和notify()/notifyAll()方法(在 )來協(xié)調線程間的運行進度(讀取)關系。 需要指出的是: notify()/notifyAll()方法和 wait ()方法都只能在被聲明為 synchronized的方法或代碼段中調用。 //共享資源 Producer p1 = new Producer(c, 1)。 //資源消耗者 ()。 ()。 } } class Producer extends Thread { private CubbyHole cubbyhole。 public Producer(CubbyHole c, int number) { cubbyhole = c。 } public void run() { for (int i = 0。 i++) { (i)。 try{ sleep((int)(() * 100))。 private int number。 = number。 for (int i = 0。 i++) { value = ()。 } } } class CubbyHole { private int seq。 //信號量 public synchronized int get() { while (available == false) { try { wait()。 notify()。 } } public synchronized void put(int value) { while (available == true) { try{ wait()。 available = true。 } … get()方法在讀信息之前先等待,直到信息可讀,讀完后通知要寫的線程。 如果一個線程持有一個鎖并試圖獲取另一個鎖時,就有死鎖的危險。 note編號為 1, pen編號為 2,線程1和線程 2都必須先獲得 1號資源后方可再獲取 2號資源。 客戶端 服務器端 request daemon 守護線程是為其它線程提供服務的線程,它一般應該是一個獨立的線程,它的 run()方法是一個無限循環(huán)。 守護線程與其它線程的區(qū)別是,如果守護線程是唯一運行著的線程 ,程序會自動退出。 3. 線程有四個基本狀態(tài):創(chuàng)建、可運行、不可運行、死亡。 5. 線程間的通信方式有兩種:管道流和共享中間類。 7. 多個線程執(zhí)行時,要用到同步方法,即使用synchronized的關鍵字設定同步區(qū)。 小結 下一講內容 —— 圖形用戶界面與事件處理 1 使用 AWT(Abstract Window Toolkit)構件 2 包含 構件的 構件 —— 構件容器( container) 3 外觀的管理與控制 4 事件與事件處理 5 AWT中的各種構件 6 各種構件的應用實例 下課!
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1