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

JAVA学习--第13章线程.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
江苏大学软件工程课程组 江苏大学软件工程课程组 第13章 线程 定义线程 在 Java 技术程序中创建不同的线程,控制由线程使用的代码和数据 控制线程的执行并编写独立于平台的线程代码 描述当多个线程共享数据时可能会产生的问题 使用等待和通知在线程之间进行通信 使用同步来保护数据免受损害 程序、进程和线程 程序是一段静态的代码,它是应用软件执行的蓝本。 进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。 线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。 Java的多线程就是在操作系统每次分时给Java程序一个时间片的CPU时间内,在若干个独立的可控制的线程之间切换。 每个Java程序都有一个缺省的主线程。我们已经知道, Java应用程序总是从主类的main方法开始执行。当JVM加载代码,发现main方法之后,就会启动一个线程,这个线程称作“主线程”,该线程负责执行main方法。那么,在main方法的执行中再创建的线程,就称为程序中的其它线程。如果main方法中没有创建其他的线程,那么当main方法执行完最后一个语句,即main方法返回时,JVM就会结束我们的Java应用程序。如果main方法中又创建了其他线程,那么JVM就要在主线程和其他线程之间轮流切换,保证每个线程都有机会使用CPU资源,main方法即使执行完最后的语句,JVM也不会结束我们的程序,JVM一直要等到程序中的所有线程都结束之后,才结束我们的Java应用程序 线程的基本概念 线程是一个程序内部的顺序控制流。 线程和进程的区别 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。 线程可以看成时轻量级的进程,同一类线程共享代码和数据空间,每个线 程有独立的运行栈和程序计数器(PC),线程切换的开销小。 多进程: 在操作系统中能同时运行多个任务(程序) 多线程: 在同一应用程序中有多个顺序流同时执行 线程 线程是虚拟的 CPU和自身程序代码和数据的封装。 线程的三个部分是: 虚拟CPU 线程体 数据 线程的创建和启动 可以有两种方式创建新的线程。 第一种 定义线程类实现Runnable接口 Thread myThread = new Thead(target)//target为Runnable接口类型。 Runnable中只有一个方法: public void run(); 用以定义线程运行体。 使用Runnable接口可以为多个线程提供共享的数据。 在实现Runnable接口的类的run方法定义中可以使用Thread的静态方法: public static Thread currentThread() 获取当前线程的引用。 第二种 可以定义一个Thread的子类并重写其run方法如: class MyThread extends Thead { public void run(){…} } 然后生成该类的对象: MyThread myThread=new MyThead(…) 使用那种好呢? 创建线程(续) 多线程的程序设计具有以下几个特性: 多个线程是来自于一个可运行的实例。 线程共享相同的数据和代码,例如: Thread t1 = new Thread(r); Thread t2 = new Thread(r); 启动线程 新创建的线程不会字符开始运行 使用 start()方法 调用start()方法可将该线程包含的虚拟CPU设置为一种可运行的状态,这意味着JVM可以调度执行该线程,但不一定意味着该线程立即开始执行 线程模式 两种线程模式: 协作式:一个线程保留对处理器的控制直到它自己决定放弃 速度快、代价低 用户编程非常麻烦 抢先式。系统可以任意的从线程中夺回对CPU的控制权,再把控制权分给其它的线程 。 两次切换之间的时间间隔就叫做时间片 效率不如协作式高 ,OS核心必须负责管理线程 简化编程,而且使程序更加可靠 多数线程的调度是抢先式的。 线程调度示例: public class Runner implements Runnable {public void run() {while (true){ // 执行许多感兴趣的操作 // 给其他线程一个机会 try{ Thread.sleep(10); }catch (InterruptedException e) { // 另一个线程中断了该线程的睡眠 }}}} 终止线程 线程到达其 run(

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档