程序員玩轉(zhuǎn)算法韓-清華教程lesson_第1頁
程序員玩轉(zhuǎn)算法韓-清華教程lesson_第2頁
程序員玩轉(zhuǎn)算法韓-清華教程lesson_第3頁
程序員玩轉(zhuǎn)算法韓-清華教程lesson_第4頁
程序員玩轉(zhuǎn)算法韓-清華教程lesson_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課前思課前思線程和進(jìn)程的區(qū)線程是如何調(diào)度多個(gè)線程是如何進(jìn)行互斥和同步的如何讓程序在瀏覽器中運(yùn)行Applet2第六講 Java的線程和1學(xué)習(xí)指掌握線程之間的相 度關(guān)系,尤其是通過線程睡眠來使其它線程獲得執(zhí)行學(xué)習(xí)指掌握線程之間的相 度關(guān)系,尤其是通過線程睡眠來使其它線程獲得執(zhí)行機(jī)會的機(jī)制,以及互斥和同步的實(shí)現(xiàn)機(jī)4學(xué)習(xí)目度和控制方法,清楚地理解多線程的互斥和同步的實(shí)現(xiàn)原理,以及多線程的應(yīng)3第十一章6難點(diǎn)和第十一章6難點(diǎn)和重多線程的調(diào)度和多線程的互斥和5虛擬的CPU虛擬的CPU,封裝在java.lang.ThreadCPU所執(zhí)行的代碼,傳遞給Thread類CPU所處理的數(shù)據(jù),傳遞給Thread類8一個(gè)

2、線程是一個(gè)程序 的順序控制流線程和進(jìn)多進(jìn)程:在操作系統(tǒng)中,能同時(shí)運(yùn)行多個(gè)任(程序)7線程的狀線程的狀即run( )方法運(yùn)行結(jié)束。9線程的狀態(tài)(新版本yield(線程的狀態(tài)(新版本yield( )new線程的狀態(tài)(舊版本阻塞狀態(tài)調(diào)阻塞狀態(tài)調(diào)用了sleep()方法輸入輸出流中發(fā)生線程阻塞狀態(tài)自然撤消(線程執(zhí)行完創(chuàng)建狀態(tài)(newThreadmyThread=newMyThreadClass((注意:MyThreadClass是Thread的子類可運(yùn)行狀態(tài)RunnableThread myThread=new MyThreadClass(); myThread.start( );線程體的構(gòu)public

3、線程體的構(gòu)publicThread(ThreadGroupgroup,Stringname線程調(diào)用sleep()方法主動放棄為等候一個(gè)條件變量,線程調(diào)用wait()方法通過繼承類Thread通過繼承類Thread構(gòu)造線程class SimpleThread extends publicSimpleThread(Stringpublicvoidrun()fori=0;i10; System.out.prln(i+getName(); try )(Math.random() * catch 構(gòu)造線程體的2中的方法run( );run( )。0024ln(DONE!+public class Two

4、ThreadsTest publicicvoidmain(String new SimpleThread(通過接口構(gòu)造通過接口構(gòu)造線publicclassClockextendsjava.applet.Applet implements Runnable public void start() if(clockThread=clockThread=new 67DONE! Second (Graphics Date now = new Date(); g.drawString(now.getHours()+:+now.getMinutes() +now.getSeconds(), 5, publ

5、icvoidstop()clockThread = null;publicvoidrun()while (clockThread != repatry catcherruptedException 線程的調(diào)線程的調(diào)時(shí)間片方非時(shí)間片方不能再從其他類繼承編寫簡單,可以直線程,無需使Thread.currentThread()線程調(diào)度隊(duì)列(Runnable隊(duì)列。線程線程線程線程線程線程調(diào)度隊(duì)列(Runnable隊(duì)列。線程線程線程線程線程優(yōu)先級為優(yōu)先級為優(yōu)先級為線程的優(yōu)先voidclass MyThread extendsclass MyThread extends StringMyThread(St

6、ringmessagethis.message=publicvoidrun()fori=0;i3;i+getPriority() );classpublicicvoidmain(Stringargs Thread t1 = new MyThread(T1); t1.start( );Thread t2 = new MyThread(T2); t2.start( );Thread t3 = new MyThread(T3); t3.start( );使其他同優(yōu)先級(調(diào)用yield( )方法)和低優(yōu)先級(調(diào)用sleep( )方法)的線程得到運(yùn)行結(jié)果T2 T2 T2 T3 T3 T3 T1 T1 T

7、1 線程的暫停線程的暫停和恢sleep()方publicvoidtt.join();/等待線程tt執(zhí)行完后再繼續(xù)往下基本的線程控終止線線程執(zhí)行完其run()測試線程狀importclassimportclassDaemonThread private sicfinal privateThreadt=newThreadSIZE; public Daemon()publicvoidyield()的Runnable隊(duì)列的最后,然后從該隊(duì) 列 class DaemonSpawn extends ThreadpublicDaemonSpawn( class DaemonSpawn extends Thr

8、eadpublicDaemonSpawn(publicln(DaemonSpawn run()while(true) publicclassDaemonspublicicvoidargs) Thread d=new Daemon(); BufferedReader stdin=new try catch(IOException public pop() idx-; public pop() idx-; 兩個(gè)線程A和B在同時(shí)使用Stack的同一個(gè)實(shí)例對象, A正在往堆棧里push一個(gè)數(shù)據(jù),B則要從堆棧中pop操作之前data=|p |q| | | | data = | p | q | r | |

9、 | |多線程的互斥與臨界資源問chardata=newpublicvoidpush(char c) dataidx = c; 在Java語言在Java語言中,引入了對象互斥鎖的概念,來一個(gè)線程 該對象。關(guān)鍵字synchronized來與對象的互斥鎖聯(lián)系。象在任一時(shí)刻只能由一個(gè)線程 。data=|p|q|r| | | data = | p | q | r | | , | |最后的結(jié)果相當(dāng)于r沒有入棧如果synchronized用在類中,則表明該publicvoidis) dataidx=c; publiccharreturnpublic synchronized char pop()while

10、(index=0)erruptedException 多線程的同SyncStackprivate index = 0;privatecharbuffer=newpublicsynchronizedvoidpush(char c) while(index = buffer.length) tryerruptedException class class Producer implements RunnableSyncStacktheStack;s) theStack = s;index- -;returnclass Consumer implements RunnableSyncStackthe

11、Stack;class Consumer implements RunnableSyncStacktheStack;s) theStack = s;public run()chari=0;i20;c=(char)(Math.random()*26+A); ln(Produced:+c); try Thread.sleep(erruptedException publicclasspublicclasspublic sic void main(String args)SyncStackstack=newSyncStack(); Runnable source=new Producer(stack

12、);Runnablesink=new Consumer(stack); Thread t1 = new Thread(source); Thread t2 = new Thread(sink); t1.start();public run()charc = theStack.pop(); erruptedException wati的作用: 已持有的鎖,進(jìn)入wait隊(duì)列程序執(zhí)行結(jié)publicclassXyzimplements privatepublic void run() while(!timeToQuit) /cleanupbeforerun()suspend()和JavaAppletJ

13、avaAppletpublic void publicclassprivateRunnabler=newXyz(); private Thread t=new Thread(r); public void startThread() publicvoidstopThread()/usespecificinstanceofXyz AppletoWorld.java AppletoWorld.java 源程序: importjava.awt.Graphics; import oWorldextendsStringhw_text; public void init () hw_text = appl

14、ication是從其中的main()方法開始運(yùn)行 Applet是在瀏覽器中運(yùn)行的,必須創(chuàng)建一個(gè) Applet為運(yùn)行Applet為運(yùn)行Applet需要編寫相應(yīng)的HTML文件paramname=appleparam tribute2 publicvoid(Graphicsg)o publicvoid同時(shí)是Applet與例import java.awt.*; public class AppletApp extends publicvoidmain(Stringargs) AppletApp app=new AppletApp(); Applet的AWT繪Applet的AWT繪(進(jìn)行繪圖的具體操作,

15、必須重update(用于更新圖形,先清除背景、前景,再調(diào)用(變或位置移動時(shí),repa ( )方法立即被系統(tǒng)自class WindowControl extends Appletpublic WindowControl(Applet public void windowClosing(WindowEvent c.destroy(java.awt.Graphicsupdate()和()的參支持java.awt.Graphicsupdate()和()的參支持基本的繪圖和畫void drawLine( ) void drawArc( ) void drawRect( )void fill3DRect(

16、 )voidfillOval(Applet的AWTrepa ( AWTate() arl pa ( (Applet 的AWT繪Applet 的AWT繪制import java.awt.*; import java.applet.*;publicclassArcTestextendsAppletimplements WindowListener pulic void init()ArcCanvasc=newjava.awt.GraphicsvoiddrawBytes() voiddrawChars() voiddrawString(publicvoidwindowDeactivated(Wind

17、owEventpublicvoidwindowDeactivated(WindowEvente) publicvoidwindowDeiconified(WindowEvente) public void windowIconified(WindowEvent e) public void windowOpend(WindowEvent e) publicicvoidmain(StringFramef=newFrame(“ArcTest”); ArcTest arcTest=new ArcTest(); add(“South”,controls=new publicstart()publics

18、top()publicvoidwindowActivated(WindowEvente) public void windowClosed(WindowEvent e) public void windowClosing(WindowEvent e)System.exit(0); if(filled) 1,startAngle,endAngle); else g.drawArc(0,0,r.width-1,r.height- 1,startAngle, endAngle);class ArcCanvas extends Font font;public void pag) Rectangle

19、public void redraw(end) this.filled=filled; public void redraw(end) this.filled=filled; classArcControlsextendsPanelimplements ActionListener TextFiled s; TextFiled e; public void actionPerformed(ActionEventpublic void actionPerformed(ActionEvent Stringpublic ArcControls(ArcCanvas Button b=null; add(s=new TextField(“0”,4); b=new Button(“Fill”); b=new Button(“Draw”); 同頁Applet間的通同頁Applet間的通public AppletContext 取得名為name的Applet對public abstract Applet getApplet(String 得到當(dāng)前頁中所有Applet對public abstract Enumeration Ap

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論