网站大量收购独家精品文档,联系QQ:2885784924

《Java高级程序设计》课件——学习情境6 Java多线程与同步机制.pptxVIP

《Java高级程序设计》课件——学习情境6 Java多线程与同步机制.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共103页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

;一、应用场景

二、线程和多线程的概念

三、线程的定义、创建和启动

四、线程的生命周期、状态及状态之间的转换

五、线程的优先级设置

;3;多线程的常见应用场景:

(1)后台任务,例如:耗时或大量占用处理器的任务,定时向大量(100w以上)的用户发送邮件;

(2)异步处理,例如:发微博、记录日志等;

(3)并发运行,例如:视频解码,音频解码,网络解码等等;

(4)分布式计算,例如:在两个或多个软件间互相共享信息。;二、线程及多线程的概念;多线程(Multithreading):是指从软件或者硬件上实现多个线程并发执行的技术。

并发(Concurrency):一个进程可以由多个线程组成,即在一个进程中可以同时运行多个不同的线程,他们分别执行不同的任务。当进程内的多个线程同时运行时,这种运行方式被称为并发运行。;三、线程的定义、创建和启动;定义一个继承Thread类的子类,并重写该类的run()方法。;定义Runnable接口的实现类,并重写该接口的run()方法。;线程实现了Runnable接口后还可以继承其他的类。

采用继承Thread类,就不能再继承其他类。因为Java只支持单一继承。;3.2线程的创建;首先创建Runnable实现类的实例,再以此实例作为Thread的构造函数里的target参数来创建Thread对象,该Thread对象才是真正的线程对象。;3.3线程的启动;四、线程的生命周期、状态及状态之间的转换;这是线程的生命周期图;在生命周期中有各种各样的状态,这些状态之间也可以相互转换。;线程的状态;一个线程可以在给定时间点处于一个状态。

同一时刻,线程有且仅有其中的一种状态。

RUNNABLE状态包括了操作系统线程状态中的Running和Ready。

这些状态是不反映任何操作系统线程状态的虚拟机状态。;线程状态间的转换;状态的转换如图1-2所示;用new关键字创建一个线程对象后,该线程对象就处于新生状态(NEW)。;线程通过调用start方法进入可运行状态(RUNNABLE)。

处于可运行状态的线程已经具备了运行条件,但还没有分配到CPU,进入线程就绪队列,等待系统为其分配CPU。;处于可运行状态的线程,如果获得了CPU的调度,就会从可运行状态变为运行状态,执行run()方法中的任务。

处于运??状态的线程最为复杂,它可以变为可运行状态、阻塞状态、等待状态、超时等待状态和终止状态。;阻塞状态是线程等待锁的状态。当线程刚进入可运行状态(注意,还没运行),发现将要调用的资源被synchronized(同步),获取不到锁标记,将会立即进入锁池状态

线程从阻塞状态只能进入就绪状态,无法直接进入运行状态。;等待状态;超时等待状态;终止状态;五、线程的优先级设置;线程优先级的设置;Thread类常用方法;小结;;一、任务描述

二、任务分析、设计

三、任务实施

四、运行结果;35;二、任务分析、设计;其类图如图6-1所示。;1.分别使用继承Thread类、实现Runable接口两种方式定义两个线程。

2.在测试主类的main方法中创建两个线程的对象,然后启动,观察结果。

3.通过线程的调度来改变线程的状态,观察结果。

4.使用Thread的getPriority()、setPriority()获取、设置线程的优先级。;三、编码实现;定义杨辉三角形线程PascalTriangleThread;定义斐波那契数列线程FibonacciThread;创建线程,即创建线程类的对象;FibonacciThreadft=newFibonacciThread();

Threadt=newThread(ft);;启动线程;从运行结果上可以看到创建的多个线程是交替执行的,这就体现了线程的并发性。;3.2通过线程的调度查看线程的状态;publicvoidrun(){

//TODOAuto-generatedmethodstub

try{

printFibonacci();

waitForASecond();//在新线程中运行waitForASecond()方法

waitForYears();//在新线程中运行waitForYears()方法

}catch(InterruptedExceptione){

e.printStackTrace();

}

};//1.查看新建线程时的状态

FibonacciThreadf1=newFibonacciThread();

Threadft1=newThread(f1);

System.out.println(新建线程时的状态:+ft1.getSta

文档评论(0)

青柠职教 + 关注
实名认证
服务提供商

从业10年,专注职业教育专业建设,实训室建设等。

1亿VIP精品文档

相关文档