




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章Java多线程机构、11.1Java中的线程、11.1.1程序、进程和线程(1)程序是静态代码,是应用程序执行的蓝本。 (2)进程是程序的动态执行过程。 这对应于从代码的加载、执行到执行完成的完整过程,过程本身也是从产生、发展到消灭的过程。 (3)线程是比进程小的执行单位。 一个处理在该执行过程中生成多个线程,并且形成多个执行线程,其中每个线程具有对于每个线程自身的生成、存在和消灭的处理,并且还是动态概念。 1.Java语言支持多线程。 如果OS时分管理每个进程,并且机器上有CPU,则在OS时分给Java程序的CPU时间内,Java程序在几个独立的可控线程之间高速切换。 如果机器上有多个CPU,Java程序可以同时获取多个时间片,则Java程序可以获取实际的多线程。 每个Java程序都有一个默认的主线程。 Java应用程序总是从主类的main方法运行。 当JVM加载代码并检测到main方法时,将调用一个名为“主线程”的线程来执行main方法。 在执行main方法时重新创建的线程被称为程序中的其他线程。 在程序中的所有线程都运行之前,JVM不会关闭Java应用程序。11.1.2线程的状态和生命周期,1.Java线程是Thread类或其子类的对象。 2 .在线程的生命周期中,当声明并创建了四个状态、新的、执行的、中断的、死亡的、1、新的(Thread类或其子类的对象时,新的线程对象处于新状态。 (2)此时线程具有适当的内存容量和其他资源。 2 .执行(1)在线程建立后,执行的条件已满足。 (2)线程调用start ()方法进入队列,等待执行。 (3)当线程获得CPU的控制权时,线程处于执行状态。 (4)线程执行后,run ()方法开始执行。 注意: Thread类的子类必须重写run ()方法才能完成线程特定的任务,除非线程退出run ()方法,否则不要再次调用start ()方法。 3、中断线程一中断,程序就在现在的执行场所停止,释放CPU,中断的原因消失后,程序重新进入队列后重新开始,直到获得CPU的控制权。 程序中断的原因有四个。 (1)CPU资源从当前线程切换到其他线程。 (2)线程执行了sleep(intm )方法。 m毫秒后,程序进入队列(3)的线程执行wait ()方法。 当其他线程调用notify ()方法时,程序在队列(4)的线程执行过程中执行操作以将其阻塞。 一旦消除了阻塞的原因,程序进入队列4,死亡线程的对象释放了实体,线程就变成死亡状态。 导致线程死亡的原因有两个: (1)运行正常,线程死亡。 (2)线程以预强制run ()方法结束,示例11.1,publicstaticvoiddmain (string args ) spehellospeakhello; SpeakNinhaospeakNinhao; speakehello=newspeakerhello (); /创建线程speakNinhao=newSpeakNinhao (); speakHello.start (); speakNinhao.start (); for(inti=1; i=12; i )System.out.print (我是主线程 ); classpeakhelloextendthread 公共语音vun () for (inti=1; i=12; i )System.out.print(hello ); classpeaknnhaoextenstred 公共语音vun () for (inti=1; i=12; i )System.out.print (你好 ); ,11.1.3线程的调度和优先级,(1)线程的优先级分为10个阶段,各Java线程的优先级在常数1-10之间。 (2)线程的优先级可以用setPriority(intgrade )法调整。 如果梯度在1-10范围之外,则抛出IllegalAgumenException。 getPriority ()返回线程的优先级。 (3)一些操作系统只能识别三个级别: 1、5和10。 (4)Java调度器的任务是使优先级高的线程总是能够执行。 (5)不提倡使用线程优先级来保证算法的正确执行。 11.2Thread的子类创建线程,1 .线程是Thread类或其子类创建的对象。如果要编写Thread类的子类,则必须重写父类的run方法。 其目的是规定线程的具体操作。 否则,因为父类的run方法中没有操作语句,所以线程不执行任何操作。 例11.2、public class example 11 _2 publicstaticvoiddmain (string args ) peopleersonone,personTwo; string buffer str=new string buffer (); 个人=新人(张三,str ); personTwo=newPeople (李四,str ); personOne.start (); personTwo.start (); ,例11.2,classspeopleextendthread string buffer str; people (字符串,字符串缓冲器str ) set name (s ); 调用从Thread类继承的setName方法的线程的名称this.str=str; for(inti=1; i=3; i )str.append(getName () ; /当前线程的名称为strsystem.out.println(getname () ,字符串为: str ); 剪辑(200 ); 使用 catch (interrupptedexceptione ) 、11.3runable接口创建线程的另一种方法是使用Thread类直接创建线程对象。 (1)所使用的结构方法包括:线程对象=new thread (运行目标); (2)实现Runnable接口的类的实例;(3)实现Runnable接口的类被称为所创建的线程的目标对象,其中,实现run接口的类可以是用于实现特定线程功能的run (4)线程对象调用start ()方法后,进入队列等待执行。 (5)可以将相同的目标对象传递给不同的线程对象,这些线程对象共享目标对象的成员变量。 例11.3、公共类别example 11 _3 publicstaticvoidmain (string args ) bankbank=newbank (); bank.set money (300 ) threadthreadone,threadTwo; thread one=new thread (bank ) thread one.set name ( one ); thread two=new thread (bank )/thread two和threadOne的目标对象是相同的threadTwo.setName(Two ); threadOne.start (); threadTwo.start (); classbankimplementsrunnable 私有输入号=0; publicvoidsetmoney (intm ) 编号=m; while (true ) string name=thread.current thread ().getname (); 例11.3,if (name.equals ( one ) if (number=160 ) system.out.println (name 变成死亡状态 ); 返回; /threadOne的run方法结束number=number 10; System.out.println (我是 name 现在number= number ) if (thread.current thread ().getname ().equals ( two ) if (number=0) system.o 返回; /threadTwo的run方法结束number=number-100; System.out.println (我是 name 现在number= number ) try thread.sleep (800 ); catch (interrupptedexceptione ) ,class example 11 _4 publicstaticvoidmain (string args ) threadDthreadda,threaddb,thread TargetObjecta1=newTargetObject (),/线程的目标对象a2=newTargetObject (); threadA=newThread(a1) /目标是a1的线程threadB=newThread(a1 ); a1.setnumber (10 ) threada.set name ( add ) threadb.set name ( add ) threadc=new thread (a2 )/目标是a2线程threadD=newThread(a2 ) a2. setnumber (-10 ) threadc.set name ( sub )。threadd.set name ( sub ) threada.start (); threadB.start (); threadC.start (); threadD.start (); ,例11.4,clsartiongregetobjectimplementasrunnable 专用输入号=0; publicvoidsetnumber (intn ) number=n; while (true ) if (thread.current thread ().getname ().equals ( add ) number; System.out.println (当前number等于 number ) if (thread.current thread ().getname ().equals ( sub ) number-; System.out.println (当前编号等于 number ) try thread.sleep (1000 ); 对于catch (interrupptedexceptione ) ,11.3.2run 因为各线程获得CPU的控制权后,就调用run ()方法,所以run ()方法的局部变量各自独立,相互不干扰。public class example 11 _5 publicstaticvoidmain (string args ) 移动=newmove (); 读张三,丽斯I; 张San=new thread (移动)张San.set name (张三 ) Lisi=new thread (移动) Lisi.set name (李四 ); zhangsan.start (); lisi.start (); classmoveimplementsrunnable public void ler () string name=thread.current thread ().getname (); /局部变量namestringbuffertr=new string buffer (); /局部变量strfor(inti=1; i=3; i )/局部变量iif(name.equals (张三 ) str.append (name ); system.out.println (名称)线程的局部变量i=i ,str= str ); else if (名称. equals (李四 ) str.append(name ); system.out.println (名称线程的局部变量i=i ,str= str ); tryThread.sleep(800 ); catch catch (interrupptedexceptione ) ,11.3.3在线程内启动其他线程,示例11.6 public class example 11 _6 publicstaticvoiddmain (string ar ThreadthreadOne; thread one=new thread (计算机) thread one.set name (张三 ); threadOne.start (); classcomputersumimplementssrunnable inti=1,sum=0; /线程共享的数据public void vun () thread thread=thread.current thread (); system.out.println (thread.getname () 开始计算 ); 在while(i=100 )、11.3.3线程上启动其他线程,sum=sum i; System.out.print( sum ); if (I=50 ) system.out.println (thread.getname () 任务已完成! i= i; threaddthreadtwo=new thre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 函数考试题目及答案
- 锅炉工作考试题及答案
- 广东氩弧焊考试题及答案
- 儿科科室考试题及答案
- 电子档考试题及答案
- 党员廉洁考试题及答案
- 大学测验考试题及答案
- 湘教版八年级信息技术上册说课稿:1.1 逐帧动画
- 2025实习生劳动合同模板
- Unit 8 Green Living Writing Workshop A survey report 教学设计-2023-2024学年学年高中英语北师大版(2019)必修第三册
- 丝锥制作工艺流程
- 2025届广东省广州市高三上学期12月调研英语试题及答案
- 医院购置设备论证报告格式
- 2025年计算机二级WPS考试题目
- GB/T 32151.27-2024温室气体排放核算与报告要求第27部分:陆上交通运输企业
- 教学教学(以往培训课件)农村集体经济审计问题
- 医疗建筑施工要点
- 对新员工保密基本培训
- 石油化工建设工程总承包招标文件示范文本
- 低压电工培训课件-电工常用工具、仪表的使用
- 口耳目手足课件
评论
0/150
提交评论