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

javascjp线程.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
javascjp线程

目 标 在完成了本模块的学习后,你应当能够: 定义一个线程 在一个Java程序中创建若干分离的线程,控制线程使用的代码和数据 控制线程的执行,并用线程编写独立于平台的代码 描述在多个线程共享数据时可能会碰到的困难 使用synchronized关键字保护数据不受破坏 使用wait()和notify()使线程间相互通信 解释为什么在JDK1.2中不赞成使用suspend()、resume()和stop()方法? 第三节 线 程 13.3.1 什么是线程? 一个关于计算机的简化的视图是:它有一个执行计算的处理机、包含处理机所执行的程序的ROM(只读存储器)、包含程序所要操作的数据的RAM(只读存储器)。在这个简化视图中,只能执行一个作业。一个关于最现代计算机比较完整的视图允许计算机在同时执行一个以上的作业。 你不需关心这一点是如何实现的,只需从编程的角度考虑就可以了。如果你要执行一个以上的作业,这类似有一台以上的计算机。在这个模型中,线程或执行上下文,被认为是带有自己的程序代码和数据的虚拟处理机的封装。java.lang.Thread类允许用户创建并控制他们的线程。 注-在这个模块中,使用“Thread”时是指java.lang.Thread而使用“thread”时是指执行上下文。 13.3.2 线程的三个部分 进程是正在执行的程序。一个或更多的线程构成了一个进程。一个线程或执行上下文由三个主要部分组成 一个虚拟处理机 CPU执行的代码 代码操作的数据 代码可以或不可以由多个线程共享,这和数据是独立的。两个线程如果执行同一个类的实例代码,则它们可以共享相同的代码。 类似地,数据可以或不可以由多个线程共享,这和代码是独立的。两个线程如果共享对一个公共对象的存取,则它们可以共享相同的数据。 在Java编程中,虚拟处理机封装在Thread类的一个实例里。构造线程时,定义其上下文的代码和数据是由传递给它的构造函数的对象指定的。 第四节 Java编程中的线程 13.4.1 创建线程 本节介绍了如何创建线程,以及如何使用构造函数参数来为一个线程提供运行时的数据和代码。 一个Thread类构造函数带有一个参数,它是Runnable的一个实例。一个Runnable是由一个实现了Runnable接口(即,提供了一个public void run()方法)的类产生的。 例如: 1.public class ThreadTest { 2.public static void main(String args[]) { 3.Xyz r = new Xyz(); 4.Thread t = new Thread(r); 5.} 6.} 7. 8.class Xyz implements Runnable { 9.int i; 10. 11.public void run() { 12.while (true) { 13.System.out.println(Hello + i++); 14.if (i == 50) break; 15.} 16.} 17.} 首先,main()方法构造了Xyz类的一个实例r。实例r有它自己的数据,在这里就是整数i。因为实例r是传给Thread的类构造函数的,所以r的整数i就是线程运行时刻所操作的数据。线程总是从它所装载的Runnable实例(在本例中,这个实例就是r。)的run()方法开始运行。 一个多线程编程环境允许创建基于同一个Runnable实例的多个线程。这可以通过以下方法来做到: Thread t1= new Thread(r); Thread t2= new Thread(r); 此时,这两个线程共享数据和代码。 总之,线程通过Thread对象的一个实例引用。线程从装入的Runnble实例的run()方法开始执行。线程操作的数据从传递给Thread构造函数的Runnable的特定实例处获得。 13.4.2 启动线程 一个新创建的线程并不自动开始运行。你必须调用它的start()方法。例如,你可以发现上例中第4行代码中的命令: t.start(); 调用start()方法使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。 13.4.3 线程调度 一个Thread对象在它的生命周期中会处于各种不同的状态。下图形象地说明了这点: 尽管线程变为可运行的,但它并不立即开始运行。在一个只带有一个 处理机的机器上,在一个时刻只能进行一个动作。下节描述了如果有一个以上可运行线程时,如何分配处理机。 在Java中,线程是抢占式的,但并不一定是分时

文档评论(0)

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

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

1亿VIP精品文档

相关文档