程序员玩转算法韩-清华教程lesson_第1页
程序员玩转算法韩-清华教程lesson_第2页
程序员玩转算法韩-清华教程lesson_第3页
程序员玩转算法韩-清华教程lesson_第4页
程序员玩转算法韩-清华教程lesson_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课前思课前思线程和进程的区线程是如何调度多个线程是如何进行互斥和同步的如何让程序在浏览器中运行Applet2第六讲 Java的线程和1学习指掌握线程之间的相 度关系,尤其是通过线程睡眠来使其它线程获得执行学习指掌握线程之间的相 度关系,尤其是通过线程睡眠来使其它线程获得执行机会的机制,以及互斥和同步的实现机4学习目度和控制方法,清楚地理解多线程的互斥和同步的实现原理,以及多线程的应3第十一章6难点和第十一章6难点和重多线程的调度和多线程的互斥和5虚拟的CPU虚拟的CPU,封装在java.lang.ThreadCPU所执行的代码,传递给Thread类CPU所处理的数据,传递给Thread类8一个

2、线程是一个程序 的顺序控制流线程和进多进程:在操作系统中,能同时运行多个任(程序)7线程的状线程的状即run( )方法运行结束。9线程的状态(新版本yield(线程的状态(新版本yield( )new线程的状态(旧版本阻塞状态调阻塞状态调用了sleep()方法输入输出流中发生线程阻塞状态自然撤消(线程执行完创建状态(newThreadmyThread=newMyThreadClass((注意:MyThreadClass是Thread的子类可运行状态RunnableThread myThread=new MyThreadClass(); myThread.start( );线程体的构public

3、线程体的构publicThread(ThreadGroupgroup,Stringname线程调用sleep()方法主动放弃为等候一个条件变量,线程调用wait()方法通过继承类Thread通过继承类Thread构造线程class SimpleThread extends publicSimpleThread(Stringpublicvoidrun()fori=0;i10; System.out.prln(i+getName(); try )(Math.random() * catch 构造线程体的2中的方法run( );run( )。0024ln(DONE!+public class Two

4、ThreadsTest publicicvoidmain(String new SimpleThread(通过接口构造通过接口构造线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 线程的调线程的调时间片方非时间片方不能再从其他类继承编写简单,可以直线程,无需使Thread.currentThread()线程调度队列(Runnable队列。线程线程线程线程线程线程调度队列(Runnable队列。线程线程线程线程线程优先级为优先级为优先级为线程的优先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( );使其他同优先级(调用yield( )方法)和低优先级(调用sleep( )方法)的线程得到运行结果T2 T2 T2 T3 T3 T3 T1 T1 T

7、1 线程的暂停线程的暂停和恢sleep()方publicvoidtt.join();/等待线程tt执行完后再继续往下基本的线程控终止线线程执行完其run()测试线程状importclassimportclassDaemonThread private sicfinal privateThreadt=newThreadSIZE; public Daemon()publicvoidyield()的Runnable队列的最后,然后从该队 列 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-; 两个线程A和B在同时使用Stack的同一个实例对象, A正在往堆栈里push一个数据,B则要从堆栈中pop操作之前data=|p |q| | | | data = | p | q | r | |

9、 | |多线程的互斥与临界资源问chardata=newpublicvoidpush(char c) dataidx = c; 在Java语言在Java语言中,引入了对象互斥锁的概念,来一个线程 该对象。关键字synchronized来与对象的互斥锁联系。象在任一时刻只能由一个线程 。data=|p|q|r| | | data = | p | q | r | | , | |最后的结果相当于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的作用: 已持有的锁,进入wait队列程序执行结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()方法开始运行 Applet是在浏览器中运行的,必须创建一个 Applet为运行Applet为运行Applet需要编写相应的HTML文件paramname=appleparam tribute2 publicvoid(Graphicsg)o publicvoid同时是Applet与例import java.awt.*; public class AppletApp extends publicvoidmain(Stringargs) AppletApp app=new AppletApp(); Applet的AWT绘Applet的AWT绘(进行绘图的具体操作,

15、必须重update(用于更新图形,先清除背景、前景,再调用(变或位置移动时,repa ( )方法立即被系统自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 得到当前页中所有Applet对public abstract Enumeration Ap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论