java学习--第13章线程

java学习--第13章线程

ID:39968919

大小:314.50 KB

页数:31页

时间:2019-07-16

java学习--第13章线程_第1页
java学习--第13章线程_第2页
java学习--第13章线程_第3页
java学习--第13章线程_第4页
java学习--第13章线程_第5页
资源描述:

《java学习--第13章线程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、江苏大学计算机学院Version2.0第13章线程1定义线程在Java技术程序中创建不同的线程,控制由线程使用的代码和数据控制线程的执行并编写独立于平台的线程代码描述当多个线程共享数据时可能会产生的问题使用等待和通知在线程之间进行通信使用同步来保护数据免受损害内容2程序、进程和线程程序是一段静态的代码,它是应用软件执行的蓝本。进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,

2、每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。Java的多线程就是在操作系统每次分时给Java程序一个时间片的CPU时间内,在若干个独立的可控制的线程之间切换。每个Java程序都有一个缺省的主线程。我们已经知道,Java应用程序总是从主类的main方法开始执行。当JVM加载代码,发现main方法之后,就会启动一个线程,这个线程称作“主线程”,该线程负责执行main方法。那么,在main方法的执行中再创建的线程,就称为程序中的其它线程。如果main方法中没有创建其他的线程,那么当main方法执行完最后一个语句

3、,即main方法返回时,JVM就会结束我们的Java应用程序。如果main方法中又创建了其他线程,那么JVM就要在主线程和其他线程之间轮流切换,保证每个线程都有机会使用CPU资源,main方法即使执行完最后的语句,JVM也不会结束我们的程序,JVM一直要等到程序中的所有线程都结束之后,才结束我们的Java应用程序3线程的基本概念线程是一个程序内部的顺序控制流。线程和进程的区别每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。线程可以看成时轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计

4、数器(PC),线程切换的开销小。多进程:在操作系统中能同时运行多个任务(程序)多线程:在同一应用程序中有多个顺序流同时执行Java的线程是通过java.lang.Thread类来实现的。VM启动时会有一个由主方法(publicstaticvoidmain(){})所定义的线程。可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thead类的start()方法来启动一个线程。4线程线程是虚拟的CPU和自身程序代码和数据的封装。线程的

5、三个部分是:虚拟CPU线程体数据线程或执行环境5线程的创建和启动可以有两种方式创建新的线程。第一种定义线程类实现Runnable接口ThreadmyThread=newThead(target)//target为Runnable接口类型。Runnable中只有一个方法:publicvoidrun();用以定义线程运行体。使用Runnable接口可以为多个线程提供共享的数据。在实现Runnable接口的类的run方法定义中可以使用Thread的静态方法:publicstaticThreadcurrentThread()获取当前线程的引用。

6、第二种可以定义一个Thread的子类并重写其run方法如:classMyThreadextendsThead{publicvoidrun(){…}}然后生成该类的对象:MyThreadmyThread=newMyThead(…)使用那种好呢?TestThread1.java6创建线程(续)多线程的程序设计具有以下几个特性:多个线程是来自于一个可运行的实例。线程共享相同的数据和代码,例如:Threadt1=newThread(r);Threadt2=newThread(r);7启动线程新创建的线程不会字符开始运行使用start()方法调用

7、start()方法可将该线程包含的虚拟CPU设置为一种可运行的状态,这意味着JVM可以调度执行该线程,但不一定意味着该线程立即开始执行8线程模式两种线程模式:协作式:一个线程保留对处理器的控制直到它自己决定放弃速度快、代价低用户编程非常麻烦抢先式。系统可以任意的从线程中夺回对CPU的控制权,再把控制权分给其它的线程。两次切换之间的时间间隔就叫做时间片效率不如协作式高,OS核心必须负责管理线程简化编程,而且使程序更加可靠多数线程的调度是抢先式的。9线程调度可运行新建正在运行阻塞死亡start()run()完成调度器阻塞事件解除阻塞基本的线

8、程状态图:10线程调度示例:publicclassRunnerimplementsRunnable{publicvoidrun(){while(true){//执行许多感兴趣的操作//给其他线程一个机会tr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。