Java面向對象程序設計教學全套課件教程ch6.ppt

(32頁)

'Java面向對象程序設計教學全套課件教程ch6.ppt'
第6章 Java的線程 Date1Java面向對象程序設計教程主要內容6.1 線程的概念與POSIX標準6.1.1 線程的概念6.1.2 線程的POSIX標準6.2 多線程的Java實現6.2.1 線程的創建方法6.2.2 線程的狀態6.3 互斥線程間的同步機制6.3.1 多線程帶來的沖突問題6.3.2 共享資源合理使用的實現6.3.3 按同步協調程度劃分的線程間的關系Date2Java面向對象程序設計教程6.1 線程的概念與POSIX標準Date3Java面向對象程序設計教程線程的概念線程其實是控制線程(Thread of control)的簡寫。 控制線程就是程序運行時的路徑,是在一個程序中與其它控制線程無關的能夠獨立運行的代碼片段。 與線程有關的幾個名詞:進程與線程并發性與并行性 異步與同步 Date4Java面向對象程序設計教程基于進程的多任務處理環境 進程是重量級的內核級實體,需要分配它們自己獨立的地址空間:包括有虛擬內存映射、文件描述符、用戶ID等,并且每個進程都有屬于自己的這些集合。用戶的程序要訪問進程結構中的數據、查詢或改變狀態,唯一方法是通過系統調用。進程間通信和轉換是昂貴和受限的。Date5Java面向對象程序設計教程基于線程的多任務處理環境 線程是輕量級實體,由寄存器、堆棧和某些數據組成。進程結構的其余部分由所有的線程所共享:如地址空間、文件描述符等——它們共享相同的地址空間并且共同分享同一個進程。線程間通信是便宜的,線程間的轉換也是低成本的。Date6Java面向對象程序設計教程線程并發并發性(Concurrency)是兩個或多個線程(或傳統的進程)可以同時在執行代碼之中;可以是相同的代碼,也可以是不同的代碼。這些線程可以一次執行,也可以多次執行,即一個已開始執行但被中斷,而另外一個已開始了。但在給定的時間點上,只有一個在CPU在處理一個線程 。Date7Java面向對象程序設計教程線程并行 并行性(Parallelism)是針對多處理器環境而言的,是指兩個或多個線程真正同時運行在不同的CPU上。在多處理器機上,很多不同的線程可以并行運行,或者說是同時運行。 Date8Java面向對象程序設計教程異步與同步異步世界需要處理同步業務有3個人在3個收銀臺前結帳3個人結帳是異步的每個人信用卡在銀行業務處理時需保證同步Date9Java面向對象程序設計教程線程的POSIX標準 Date10Java面向對象程序設計教程6.2 多線程的Java實現Date11Java面向對象程序設計教程主線程通過調用Thread類的currentThread方法來查看主線程:Thread.currentThread() 舉例:MainThread.java Date12Java面向對象程序設計教程創建線程有兩種方式 通過直接擴展Thread類來直接創建線程:public class BidThread extends Thread new BidThread(10, 1000).start() 舉例:BidThread.java ,Auction.java 通過設計一個類,使之實現java. lang. Runnable接口,再把該接口作為參數傳遞給Thread類的構造方法后間接創建線程:public class BidRun implements Runnable new Thread(new BidRun(10, 1000)).start() 舉例:BidRun.java ,Auction.java Date13Java面向對象程序設計教程采用間接創建線程的原因 第一個理由是我們并不改變線程本身的性質,僅覆蓋run方法,并沒有增加新的功能,因此將Thread擴展子類并不恰當,這不太符合類擴展規范。 第二個理由是:如果實現Runnable接口,它可能使我們所設計的類擴展其它類型而變得更為有用。 Date14Java面向對象程序設計教程線程內容的定義 覆蓋或實現run方法 …start方法一般只用來觸發線程,把線程的內容放在這個方法體中不太規范,而且這樣做實際上線程不會競爭運行。思考與練習11 如果直接調用run方法,線程也不會競爭運行,必須通過start方法間接調用run方法。思考與練習12 Date15Java面向對象程序設計教程Thread類一些方法使用的例子線程優先級:PriorityTest.java 創建守護線程:DaemonTest.java 線程列表:ThreadList.java 線程組信息:ThreadGroupTest.java Date16Java面向對象程序設計教程線程的狀態 Date17Java面向對象程序設計教程與線程所處狀態有關的方法舉例join方法的例子:JoinTest.java yield方法的例子:YieldTest.java interrupt方法的例子:InterruptTest.java Date18Java面向對象程序設計教程6.3 互斥線程間的同步機制Date19Java面向對象程序設計教程多線程帶來的沖突問題 實例變量也是共享的舉例: ThreadSharedData.java 使用volatile關鍵字通知線程及時取得共享變量的更新值 共享資源使用沖突 Date20Java面向對象程序設計教程銀行業務中共享資源沖突示意 Date21Java面向對象程序設計教程共享資源合理使用的實現 使用同步方法 調用被synchronized關鍵字修飾的方法 使用同步代碼塊 synchronized(obj) {// statements to be synchronized} 舉例:AccountSimulator.java Date22Java面向對象程序設計教程討論:同步代碼塊中對象鎖的選擇類本身: synchronized(TransferManager.class)靜態對象: static Object obj=new Object(); synchronized(obj) 實例對象: synchronized(this) 舉例:見AccountSimulator.javaDate23Java面向對象程序設計教程思考在AccountSimulator.java例子中為什么synchronized(this) 無法上鎖以保證同步?TransferManager tm1=new TransferManager(checking, savings);TransferManager tm2=new TransferManager(savings, checking); Thread t1=new Thread(tm1);Thread t2=new Thread(tm2); t1.start();t2.start();在線程中使用不同的實例對象,若用this,實際上兩個線程分別使用一個對象鎖。Date24Java面向對象程序設計教程思考如果要求使用synchronized(this) 也能保證同步,程序應如何改動?TransferManager tm1=new TransferManager(checking, savings);TransferManager tm2=new TransferManager(savings, checking); Thread t1=new Thread(tm1);Thread t2=new Thread(tm1); t1.start();t2.start();讓線程使用相同的實例對象,則用this時,兩個線程使用一個對象鎖。Date25Java面向對象程序設計教程討論:同步導致的死鎖問題死鎖發生在當兩個線程對兩個同步對象有循環依賴關系時。例如,假定一個線程進入了對象X的對象鎖而另一個線程進入了對象Y的對象鎖。如果X的線程試圖調用Y的同步方法,它將像預料的一樣被鎖定。而Y的線程同樣希望調用X的一些同步方法,線程永遠等待,因為為到達X,必須釋放自己的Y的鎖定以使第一個線程可以完成。 舉例:DeadLock.java Date26Java面向對象程序設計教程按同步協調程度劃分的線程間的關系 不相關的線程相關但不需要同步的線程互斥線程交互式互斥線程 Date27Java面向對象程序設計教程不相關的線程:Drinker.java Date28Java面向對象程序設計教程相關但無需同步線程:Kid.java Date29Java面向對象程序設計教程互斥線程:Customer.java Date30Java面向對象程序設計教程交互式的互斥線程:Consumer.java Date31Java面向對象程序設計教程交互式互斥線程使用的wait/notify機制 wait方法意味著,即使線程擁有鎖,由于得不到期望的數據,因無法做進一步的處理,也只能放棄鎖,使線程處于等待狀態,而讓另一個線程繼續工作。notify方法可以通知位于等待隊列中的任何一個線程,但不一定按照FIFO的順序進行而是遵循JVM的調度。notify與notifyAll方法之間的差別是:notifyAll方法將喚醒等待當前對象的所有線程,對于所有讀取同一信息或者等待同一答案的消費者等待隊列而言,這種方法是恰當的。調用wait/notify的方法必須聲明為synchronized,否則將引發運行時異常java.lang.IllegalMonitorStateException。Date32Java面向對象程序設計教程
關 鍵 詞:
教學 全套 程序設計 教程 面向對象 ch6 java ch
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:Java面向對象程序設計教學全套課件教程ch6.ppt
鏈接地址: http://www.476824.live/p-51617566.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 广东十一选五玩法规则 股票趋势分析方法 配资渠道规范佳永配资 官方北京赛车开奖记录 全年平码公式规律 广东11选5玩法介绍 内蒙古11选五胣胆玩法 酷喜乐彩铅怎么样 山西十一选五走势图l 广西11选五走势图 百度