欢迎来到天天文库
浏览记录
ID:50617951
大小:269.00 KB
页数:25页
时间:2020-03-07
《scjp培训资料第11章java线 程.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第11章线程本模块讨论多线程,它允许一个程序同时执行多个任务。第一节相关问题讨论-以下为与本模块内容有关的问题:l我如何使我的程序执行多个任务?第二节目标在完成了本模块的学习后,你应当能够:l定义一个线程l在一个Java程序中创建若干分离的线程,控制线程使用的代码和数据l控制线程的执行,并用线程编写独立于平台的代码l描述在多个线程共享数据时可能会碰到的困难l使用synchronized关键字保护数据不受破坏l使用wait()和notify()使线程间相互通信l解释为什么在JDK1.2中不赞成使用suspend()、resume()和stop()方法?第三节线程线程l什么是线程?l虚拟处理机
2、13.3.1什么是线程?一个关于计算机的简化的视图是:它有一个执行计算的处理机、包含处理机所执行的程序的ROM(只读存储器)、包含程序所要操作的数据的RAM(只读存储器)。在这个简化视图中,只能执行一个作业。一个关于最现代计算机比较完整的视图允许计算机在同时执行一个以上的作业。你不需关心这一点是如何实现的,只需从编程的角度考虑就可以了。如果你要执行一个以上的作业,这类似有一台以上的计算机。在这个模型中,线程或执行上下文,被认为是带有自己的程序代码和数据的虚拟处理机的封装。java.lang.Thread类允许用户创建并控制他们的线程。注-在这个模块中,使用“Thread”时是指java.l
3、ang.Thread而使用“thread”时是指执行上下文。13.3.2线程的三个部分线程的三个部分l处理机l代码l数据进程是正在执行的程序。一个或更多的线程构成了一个进程。一个线程或执行上下文由三个主要部分组成l一个虚拟处理机lCPU执行的代码l代码操作的数据代码可以或不可以由多个线程共享,这和数据是独立的。两个线程如果执行同一个类的实例代码,则它们可以共享相同的代码。类似地,数据可以或不可以由多个线程共享,这和代码是独立的。两个线程如果共享对一个公共对象的存取,则它们可以共享相同的数据。在Java编程中,虚拟处理机封装在Thread类的一个实例里。构造线程时,定义其上下文的代码和数据是
4、由传递给它的构造函数的对象指定的。第四节Java编程中的线程13.4.1创建线程创建线程l多线程编程l从同一个Runnbale实例派生的多线程l线程共享数据和代码。本节介绍了如何创建线程,以及如何使用构造函数参数来为一个线程提供运行时的数据和代码。一个Thread类构造函数带有一个参数,它是Runnable的一个实例。一个Runnable是由一个实现了Runnable接口(即,提供了一个publicvoidrun()方法)的类产生的。例如:1.publicclassThreadTest{2.publicstaticvoidmain(Stringargs[]){3.Xyzr=newXyz()
5、;4.Threadt=newThread(r);5.}6.}7.8.classXyzimplementsRunnable{9.inti;10.11.publicvoidrun(){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
6、()方法开始运行。一个多线程编程环境允许创建基于同一个Runnable实例的多个线程。这可以通过以下方法来做到:Threadt1=newThread(r);Threadt2=newThread(r);此时,这两个线程共享数据和代码。总之,线程通过Thread对象的一个实例引用。线程从装入的Runnble实例的run()方法开始执行。线程操作的数据从传递给Thread构造函数的Runnable的特定实例处获得。13.4.2启动线程启动线程l使用start()方法l使线程置于可运行状态一个新创建的线程并不自动开始运行。你必须调用它的start()方法。例如,你可以发现上例中第4行代码中的命令:
7、t.start();调用start()方法使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。13.4.3线程调度一个Thread对象在它的生命周期中会处于各种不同的状态。下图形象地说明了这点:尽管线程变为可运行的,但它并不立即开始运行。在一个只带有一个处理机的机器上,在一个时刻只能进行一个动作。下节描述了如果有一个以上可运行线程时,如何分配处理机。在Java中,线程是
此文档下载收益归作者所有