版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章Java的執行緒10-1執行緒的基礎10-2Java執行緒的使用方法10-3Java執行緒的同步10-4管道串流的執行緒第10章Java的執行緒10-1執行緒的基礎10-1執行緒的基礎10-1-1Java的執行緒10-1-2多工與多執行緒10-1執行緒的基礎10-1-1Java的執行緒10-1-1Java的執行緒-說明「執行緒」(Thread)也稱為「輕量行程」(LightweightProcess),其執行過程類似上述程式執行,只是執行緒不能單獨存在或執行,一定需要隸屬於一個程式,由程式啟動執行緒,如右圖所示:10-1-1Java的執行緒-說明「執行緒」(Thread本资料来源本资料来源10-1-1Java的執行緒-多執行緒如果程式碼本身沒有先後依存關係,程式能夠分割成多個同步執行緒來一起執行,這種程式設計方法稱為「平行程式設計」(ParallelProgramming),如右圖所示:10-1-1Java的執行緒-多執行緒如果程式碼本身沒有先10-1-2多工與多執行緒目前的作業系統都強調「多工」(Multitasking)。例如:微軟的Windows作業系統屬於一套多工的作業系統,可以同時執行小畫家、記事本和小算盤等多個應用程式。不同於作業系統的多工,「多執行緒」(Multithreaded)是指在單一應用程式擁有多個執行流程。例如:Web瀏覽程式可以在下載網頁檔案的同時顯示動畫、播放音樂或捲動視窗瀏覽網頁內容。10-1-2多工與多執行緒目前的作業系統都強調「多工」(M10-2Java執行緒的使用方法10-2-1實作Runnable介面10-2-2繼承Thread類別10-2Java執行緒的使用方法10-2-1實作Runn10-2Java執行緒的使用方法Java執行緒是建立Thread類別的物件,一共有2種方式建立多執行緒應用程式,如下所示:實作Runnable介面。繼承Thread類別。10-2Java執行緒的使用方法Java執行緒是建立Thr10-2-1實作Runnable介面-架構Swing應用程式繼承自JFrame,JavaApplet繼承自JApplet,就只能實作Runnable介面的run()方法來建立多執行緒的應用程式,如下所示:classUserThreadextendsUserClassimplementsRunnable{
publicUserThread(intlength){}publicvoidrun(){………}}10-2-1實作Runnable介面-架構Swing應用程10-2-1實作Runnable介面-啟動接著可以建立Thread物件和啟動執行緒,如下所示:UserThreadut1=newUserThread(5);Threadt1=newThread(ut1,"執行緒A");t1.start();上述程式碼在建立好UserThread物件ut1後,使用ut1物件建立Thread物件的執行緒,參數字串是執行緒名稱,最後使用start()方法啟動執行緒。10-2-1實作Runnable介面-啟動接著可以建立Th10-2-1實作Runnable介面-建構子Thread類別的建構子,如下表所示:10-2-1實作Runnable介面-建構子Thread類10-2-1實作Runnable介面-相關方法Thread類別的相關方法,如下表所示:10-2-1實作Runnable介面-相關方法Thread10-2-2繼承Thread類別-架構若類別沒有繼承其他類別,就可以直接繼承Thread類別,然後覆寫run()方法建立執行緒物件,如下所示:classUserThreadextendsThread{publicUserThread(intlength,Stringname){}publicvoidrun(){………}}10-2-2繼承Thread類別-架構若類別沒有繼承其他類10-2-2繼承Thread類別-啟動接著就可以建立Thread物件,啟動執行緒,如下所示:UserThreadut1=newUserThread(5,"執行緒A");ut1.start();上述程式碼在建立好UserThread物件ut1後,這是Thread物件,所以可以直接使用start()方法啟動執行緒。10-2-2繼承Thread類別-啟動接著就可以建立Thr10-3Java執行緒的同步-說明在第10-2節程式範例的執行緒間並沒有任何關係,簡單的說,執行緒的目的只是為了加速程式執行。另一種情況是執行緒間擁有生產和消費者的關係或是同時存取相同資源,當有此情況,就需要考量「同步」(Synchronization)問題。10-3Java執行緒的同步-說明在第10-2節程式範例的10-3Java執行緒的同步-生產者和消費者模型生產者和消費者模型(Producer/ConsumerModel)生產者和消費者模型是指一個執行緒產生資料,稱為生產者,另一個執行緒讀取生產者產生的資料,稱為消費者,產生的資料是儲存在共用的資料儲存緩衝區稱為「佇列」(Queue),這是一種先進先出的資料結構,如下圖所示:10-3Java執行緒的同步-生產者和消費者模型生產者和消10-3Java執行緒的同步-synchronized關鍵字synchronized關鍵字生產者和消費者是同步存取同一個資源物件,所以存取的enqueue()和dequeue()方法需要使用synchronized關鍵字鎖定資源,稱為同步方法(SynchronizedMethod),如下所示:publicsynchronizedvoidenqueue(intvalue){……}publicsynchronizedintdequeue(){……}10-3Java執行緒的同步-synchronized關鍵10-3Java執行緒的同步-wait()和notify()方法(說明)wait()和notify()方法同步執行緒雖然使用synchronized關鍵子避免同時存取相同物件,但是為了讓生產者產生的資料有地方儲存,且消費者能夠取得資料,有兩種情況需要特別處理,如下所示:佇列空了:如果佇列空了,消費者需要等待生產者產生資料。佇列滿了:如果佇列滿了,表示已經沒有地方儲存,生產者需要等待消費者讀取資料。10-3Java執行緒的同步-wait()和notify(10-3Java執行緒的同步-wait()和notify()方法(enqueue()方法)publicsynchronizedvoidenqueue(intvalue){try//如果佇列已滿
{while(queue.isFull()){wait();//等待
}}catch(InterruptedExceptione){}queue.enqueue(value);//存入
notify();//通知dequeue()}10-3Java執行緒的同步-wait()和notify(10-3Java執行緒的同步-wait()和notify()方法(dequeue()方法)publicsynchronizedintdequeue(){try//如果佇列已空
{while(queue.isEmpty()){wait();//等待}}catch(InterruptedExceptione){}intdata=queue.dequeue();//取出
notify();//通知enqueue()returndata;}10-3Java執行緒的同步-wait()和notify(10-3Java執行緒的同步-wait()和notify()方法(相關方法)Object類別的相關方法,如下表所示:10-3Java執行緒的同步-wait()和notify(10-4管道串流的執行緒JavaI/O套件的PipedInputStream和PipedOutputStream管道串流類別是InputStream和OutputStream的子類別,能夠建立類似第10-3節生產者和消費者模型的Java應用程式。PipedInputStream和PipedOutputStream管道串流類別能夠在一個執行緒產生資料寫入PipedOutputStream串流物件,然後在另一個執行緒從PipedInputStream串流物件讀取資料。10-4管道串流的執行緒JavaI/O套件的PipedI第10章Java的執行緒10-1執行緒的基礎10-2Java執行緒的使用方法10-3Java執行緒的同步10-4管道串流的執行緒第10章Java的執行緒10-1執行緒的基礎10-1執行緒的基礎10-1-1Java的執行緒10-1-2多工與多執行緒10-1執行緒的基礎10-1-1Java的執行緒10-1-1Java的執行緒-說明「執行緒」(Thread)也稱為「輕量行程」(LightweightProcess),其執行過程類似上述程式執行,只是執行緒不能單獨存在或執行,一定需要隸屬於一個程式,由程式啟動執行緒,如右圖所示:10-1-1Java的執行緒-說明「執行緒」(Thread本资料来源本资料来源10-1-1Java的執行緒-多執行緒如果程式碼本身沒有先後依存關係,程式能夠分割成多個同步執行緒來一起執行,這種程式設計方法稱為「平行程式設計」(ParallelProgramming),如右圖所示:10-1-1Java的執行緒-多執行緒如果程式碼本身沒有先10-1-2多工與多執行緒目前的作業系統都強調「多工」(Multitasking)。例如:微軟的Windows作業系統屬於一套多工的作業系統,可以同時執行小畫家、記事本和小算盤等多個應用程式。不同於作業系統的多工,「多執行緒」(Multithreaded)是指在單一應用程式擁有多個執行流程。例如:Web瀏覽程式可以在下載網頁檔案的同時顯示動畫、播放音樂或捲動視窗瀏覽網頁內容。10-1-2多工與多執行緒目前的作業系統都強調「多工」(M10-2Java執行緒的使用方法10-2-1實作Runnable介面10-2-2繼承Thread類別10-2Java執行緒的使用方法10-2-1實作Runn10-2Java執行緒的使用方法Java執行緒是建立Thread類別的物件,一共有2種方式建立多執行緒應用程式,如下所示:實作Runnable介面。繼承Thread類別。10-2Java執行緒的使用方法Java執行緒是建立Thr10-2-1實作Runnable介面-架構Swing應用程式繼承自JFrame,JavaApplet繼承自JApplet,就只能實作Runnable介面的run()方法來建立多執行緒的應用程式,如下所示:classUserThreadextendsUserClassimplementsRunnable{
publicUserThread(intlength){}publicvoidrun(){………}}10-2-1實作Runnable介面-架構Swing應用程10-2-1實作Runnable介面-啟動接著可以建立Thread物件和啟動執行緒,如下所示:UserThreadut1=newUserThread(5);Threadt1=newThread(ut1,"執行緒A");t1.start();上述程式碼在建立好UserThread物件ut1後,使用ut1物件建立Thread物件的執行緒,參數字串是執行緒名稱,最後使用start()方法啟動執行緒。10-2-1實作Runnable介面-啟動接著可以建立Th10-2-1實作Runnable介面-建構子Thread類別的建構子,如下表所示:10-2-1實作Runnable介面-建構子Thread類10-2-1實作Runnable介面-相關方法Thread類別的相關方法,如下表所示:10-2-1實作Runnable介面-相關方法Thread10-2-2繼承Thread類別-架構若類別沒有繼承其他類別,就可以直接繼承Thread類別,然後覆寫run()方法建立執行緒物件,如下所示:classUserThreadextendsThread{publicUserThread(intlength,Stringname){}publicvoidrun(){………}}10-2-2繼承Thread類別-架構若類別沒有繼承其他類10-2-2繼承Thread類別-啟動接著就可以建立Thread物件,啟動執行緒,如下所示:UserThreadut1=newUserThread(5,"執行緒A");ut1.start();上述程式碼在建立好UserThread物件ut1後,這是Thread物件,所以可以直接使用start()方法啟動執行緒。10-2-2繼承Thread類別-啟動接著就可以建立Thr10-3Java執行緒的同步-說明在第10-2節程式範例的執行緒間並沒有任何關係,簡單的說,執行緒的目的只是為了加速程式執行。另一種情況是執行緒間擁有生產和消費者的關係或是同時存取相同資源,當有此情況,就需要考量「同步」(Synchronization)問題。10-3Java執行緒的同步-說明在第10-2節程式範例的10-3Java執行緒的同步-生產者和消費者模型生產者和消費者模型(Producer/ConsumerModel)生產者和消費者模型是指一個執行緒產生資料,稱為生產者,另一個執行緒讀取生產者產生的資料,稱為消費者,產生的資料是儲存在共用的資料儲存緩衝區稱為「佇列」(Queue),這是一種先進先出的資料結構,如下圖所示:10-3Java執行緒的同步-生產者和消費者模型生產者和消10-3Java執行緒的同步-synchronized關鍵字synchronized關鍵字生產者和消費者是同步存取同一個資源物件,所以存取的enqueue()和dequeue()方法需要使用synchronized關鍵字鎖定資源,稱為同步方法(SynchronizedMethod),如下所示:publicsynchronizedvoidenqueue(intvalue){……}publicsynchronizedintdequeue(){……}10-3Java執行緒的同步-synchronized關鍵10-3Java執行緒的同步-wait()和notify()方法(說明)wait()和notify()方法同步執行緒雖然使用synchronized關鍵子避免同時存取相同物件,但是為了讓生產者產生的資料有地方儲存,且消費者能夠取得資料,有兩種情況需要特別處理,如下所示:佇列空了:如果佇列空了,消費者需要等待生產者產生資料。佇列滿了:如果佇列滿了,表示已經沒有地方儲存,生產者需要等待消費者讀取資料。10-3Java執行緒的同步-wait()和notify(10-3Java執行緒的同步-wait()和notify()方法(enqueue()方法)publicsynchronizedvoidenqueue(intvalue){try//如果佇列已滿
{while(queue.isFull()){wait();//等待
}}catch(InterruptedExcept
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 领导挂牌销号工作制度
- 风电运维工作制度范本
- 高速公路路长工作制度
- 黄码核酸采集工作制度
- 咸阳市永寿县2025-2026学年第二学期四年级语文第八单元测试卷(部编版含答案)
- 黔南布依族苗族自治州贵定县2025-2026学年第二学期四年级语文第七单元测试卷(部编版含答案)
- 三门峡市义马市2025-2026学年第二学期三年级语文期末考试卷(部编版含答案)
- 公墓管理员岗前常识考核试卷含答案
- 机电设备维修工复试测试考核试卷含答案
- 镁还原工岗前操作规范考核试卷含答案
- 建筑能源系统运行优化方法-全面剖析
- 困难气道管理指南2024
- 肌内注射课件
- 2024新人教版初中英语单词表默写版(七~九年级)
- 2023年国家开放大学招聘考试真题
- 《经济与社会》韦伯
- 高二下学期期末英语读后续写画的风波:我和妹妹在奶奶家的冲突讲义
- DL-T5054-2016火力发电厂汽水管道设计规范
- GB/T 15587-2023能源管理体系分阶段实施指南
- 华兴数控7系列说明书(车)
- YY/T 0995-2015人类辅助生殖技术用医疗器械术语和定义
评论
0/150
提交评论