




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海口市美兰区招聘教师真题2024
- 2024年海南职业技术学院社会招聘专任教师辅导员考试真题
- 2025年光电子器件及激光器件合作协议书
- 2023年招聘编外合同制人员报名表
- 临床检验分析仪器战略市场规划报告
- 计算机通信技术实习经验总结
- 高层建筑施工质量提升措施
- 危险化学品储存与管理计划
- 大型活动安全管理责任人职责
- 公益活动朗诵稿件范文
- 医疗卫生中心社会效益与经济效益分析
- 3月3号全国爱耳日-保护耳朵课件
- 2025年买卖双方合同模板
- 最专业的企业介绍模板课件
- 2025国家电投集团资本控股限公司本部招聘11人高频重点模拟试卷提升(共500题附带答案详解)
- 2025年湖南中医药高等专科学校高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年山东司法警官职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024年05月湖南招商银行长沙分行长期社会招考笔试历年参考题库附带答案详解
- 铁路信号基础设备维护(第二版) 课件 项目一 信号继电器检修
- 《小兔子安家》(说课稿)-2024-2025学年一年级下册数学北师大版
- 小学生人际交往能力培养的实践研究
评论
0/150
提交评论