




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章,多线程程序设计,线程的定义,进程是一个用来描述处于动态运行状态的应用程序的概念,即一个进程就是一个执行中的程序,每个进程都有一块自己独立的地址空间,并可以包含多个线程。这些线程将共享进程的地址空间及操作系统分配给这个进程的资源。线程是指进程中的一个执行流,多线程是指在一个进程中同时运行多个不同线程,每个线程分别执行不同的任务。,10.1创建线程,创建线程的两种方法:利用Thread类创建线程利用Runnable接口创建线程,1、利用Thread类创建线程,使用这种方式创建、启动线程的基本过程:声明一个Thread类的子类,并且覆盖其中的run()成员方法,并将线程执行的程序代码写在其中。使用时通过调用Thread类提供的start()方法间接地使用它。,例:利用Thread类创建线程,publicclassMyThread_1extendsThreadpublicvoidrun(),publicclassMultiThread_1publicstaticvoidmain(Stringargs)Threadt1=newMyThread_1();t1.setName(T1);Threadt2=newMyThread_1();t2.setName(T2);t1.start();t2.start();,2、利用Runnable接口创建线程,使用这种方式创建、启动线程的基本过程:声明一个实现Runnable接口的类。以实现Runnable接口的类对象为参数创建一个Thread类对象。调用Thread类对象的start()方法启动线程。,例:利用Runnable接口创建线程,publicclassMyThread_2implementsRunnablepublicvoidrun(),publicclassMultiThread_2publicstaticvoidmain(Stringargs)MyThread_2thread=newMyThread_2();ThreadthreadObj=newThread(thread);threadObj.start();,10.2线程状态的转换,一个线程的生命周期中,有四个状态,线程就是在这4个状态之间不断变换,直到死亡为止。,线程的优先级,每一个线程都有一个优先级,在Thread类中有3个常量MIN_PRIORITY、MAX_PRIORITY、NORMAL_PRIORITY分别表示优先级为1、10和5,它们代表最低优先级、最高优先级和普通优先级。可以调用Thread类的setPriority(intlevel)成员方法为某个线程设置优先级。例如,假设threadObj是一个Thread类对象,可以用threadObj.setPriority(6);设置优先级。,10.3线程控制,基本的线程控制方法启动线程start()阻塞线程wait()唤醒线程notify()或notifyAll()或interrupt()线程让步yield()等待其它线程结束join()判断线程是否处于活动状态isAlive(),10.4多线程的同步与互斥,一般来说线程之间不是孤立的,多个线程可能共享某些资源。比如,一个线程要读取数据,另外一个线程要处理这些数据。因此,系统必须对线程进行同步控制,等到第一个线程读取完数据,第二个线程才能处理该数据,从而避免错误。简单地说,在一个时刻只能够被一个线程访问的资源称为临界资源,而访问临界资源的那段代码则被称为临界区。临界区的使用必须互斥地进行,即一个线程在临界区中执行代码时,其它线程不能够进入临界区。,synchronized,Java中,引入了对象”互斥锁”的概念,来保证共享数据操作的完整性。每个Java对象都对应于一个”互斥锁”标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。一旦某个线程获得了该锁,别的线程如果希望获得该锁,只能等待这个线程释放锁之后。关键字synchronized用来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能由一个线程访问。此时,如果有第二个线程也要访问同一个对象,它也试图获取该对象的互斥锁,但因该对象已经被锁定,则第二个线程必须等待,直到锁被释放为止。,synchronized,1、synchonized方法synchronized,或synchronized(this),synchronized,2、synchronized块将synchronized关键字加在某代码块之前,就可声明该代码块为synchronized块,从而使该代码块成为互斥使用的代码块,即其中的代码必须获得对象的锁方能执行。,synchronized,例:模拟银行中的存款、取款-1,publicclassAccountprivateStringname;privatefloatamount;publicsynchronizedvoiddeposit(floatamt)floattmp=amount;tmp+=amt;tryThread.sleep(1);catch(InterruptedExceptione)amount=tmp;publicfloatgetBalance()returnamount;,例:模拟银行中的存款、取款-2,publicsynchronizedfloatwithdraw(floatamt)floattmp=amount;if(tmp=amt)tmp-=amt;elsetmp=0;System.out.println(预取+amt+,剩余金额不足!仅能取走+amount);tryThread.sleep(1)catch(InterruptedExceptione)amount=tmp;returnamount;,例:模拟银行中的存款、取款-3,publicclassDepositThreadextendsThread/存款线程privateAccounta1;privatefloatamount;publicDepositThread(Accounta1,floatamount)this.a1=a1;this.amount=amount;,例:模拟银行中的存款、取款-4,publicvoidrun()synchronized(a1)floatk=a1.getBalance();trysleep(1);/模拟花费时间catch(InterruptedExceptione)a1.deposit(amount);System.out.println(现有+k+,存入+amount+,余额+a1.getBalance();,例:模拟银行中的存款、取款-5,publicclassWithdrawThreadextendsThread/取款线程privateAccounta1;privatefloatamount;publicWithdrawThread(Accounta1,floatamount)this.a1=a1;this.amount=amount;publicvoidrun()synchronized(a1)floatk=a1.getBalance();trysleep(1);/模拟花费时间catch(InterruptedExceptione)floatm=a1.withdraw(amount);,例:模拟银行中的存款、取款-6,publicclassAccount
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自行车上的简单机械
- 自考本科民法学教材课件
- 2024-2025学年度金属非金属矿山安全作业真题附参考答案详解(基础题)
- 2025年浙江省奉化市北师大版7年级数学上册期中题库试题附完整答案详解【有一套】
- 自然美景课件
- 2024-2025学年度正德职业技术学院单招《职业适应性测试》考前冲刺练习试题及参考答案详解(综合卷)
- 2025高职单招考试综合练习含答案详解【达标题】
- 饲料企业安全生产培训会课件
- 2025职称计算机过关检测试卷含答案详解【预热题】
- 2024年安全员考试高分题库含答案详解【培优B卷】
- 殡葬礼仪服务投标方案(技术方案)
- 中建八局后备安全总监竞聘
- 血液灌流治疗癌症的原理与前景
- 2024年四川能投宜宾市叙州电力限公司招聘高频考题难、易错点模拟试题(共500题)附带答案详解
- -广告制作报价单-明细
- 屁屁辅助脚本
- 【顺丰集团财务共享中心运作问题与优化建议探析15000字(论文)】
- 肺功能科普知识宣传
- 中医科室发展规划方案
- 食药环侦知识讲座
- 介入在呼吸系统的应用
评论
0/150
提交评论