Java就业培训教程第五章 多线程

Java就业培训教程第五章 多线程

ID:37567319

大小:572.00 KB

页数:34页

时间:2019-05-25

Java就业培训教程第五章 多线程_第1页
Java就业培训教程第五章 多线程_第2页
Java就业培训教程第五章 多线程_第3页
Java就业培训教程第五章 多线程_第4页
Java就业培训教程第五章 多线程_第5页
资源描述:

《Java就业培训教程第五章 多线程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第5章多线程5.1如何创建与理解线程在讲解线程之前,我们先讲解一下什么是进程。简单地说,在多任务系统中,每个独立执行的程序称为进程,也就是“正在进行的程序”。我们现在使用的操作系统一般都是多任务的,即能够同时执行多个应用程序,如我们接触最多的Windows、Linux、Unix。实际情况是,操作系统负责对CPU等设备资源进行分配和管理,虽然这些设备某一时刻只能做一件事,但以非常小的时间间隔交替执行多个程序,就可以给人以同时执行多个程序的感觉。如果我们同时运行记事本程序的两个实例,这就是两个不同的进程。我有一个朋友对我说,Windows真好,我在

2、从C盘向D盘拷贝文件的同时,又可从E盘向F盘拷贝文件,拷贝效率大为提高。大家对此话有何感想?我一听,就知道他充其量只能算是业余计算机爱好者了,因为CPU只有一个,每个进程都有独立的代码和数据空间(进程上下文),在两个文件拷贝进程间切换需要额外的开销,反而比先执行完C盘向D盘的拷贝,再启动E盘向F盘的拷贝慢。5.1.1了解线程概念一个进程中又可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索。在单线程中,程序代码按调用顺序依次往下执行,在这种情况下,当主函数调用了子函数,主函数必须等待子函数返回后才能继续往下执行,不能实现两段程序代码

3、同时交替运行的效果。如果要一程序中实现多段代码同时交替运行,就需产生多个线程,并指定每个线程上所要运行的程序代码段,这就是多线程。当程序启动运行时,就自动产生了一个线程,主函数main就是在这个线程上运行的,当我们不再产生新的线程时,我们的程序就是单线程的,比如我们以前的例子,它们都是单线程的。创建多线程有两种方法:继承Thread类和实现Runnable接口,在下面的小节里,我们分别进行讲解。5.1.2用Thread类创建线程Java的线程是通过java.lang.Thread类来控制的,一个Thread类的对象代表一个线程,而且只能代表一个

4、线程,通过Thread类和它定义的对象,我们可以获得当前线程对象、获取某一线程的名称,可以实现控制线程暂停一段时间等功能,关于Thread类的具体应用与讲解,我们将在文中稍后的地方逐步涉及,在学完本章后,大家也需通读一下JDK文档中有关Thread类的方法及说明,并动手编写一些小程序对其中的某些方法测试验证一下,以便对Thread类有更全面的了解与认识。下面,我们就开始通过程序来详细讲解吧!程序清单:ThreadDemo1.javapublicclassThreadDemo1{代码块1publicstaticvoidmain(Stringarg

5、s[]){newTestThread().run();while(true)182{System.out.println("mainthreadisrunning");}}}代码块2classTestThread{publicvoidrun(){while(true){System.out.println(Thread.currentThread().getName()+" isrunning");}}}一个代码段被执行,一定是在某个线程上运行的,代码与线程密不可分,同一段代码可以与多个线程相关联,在多个线程上执行的也可以是相同的一段代码,好比

6、多个火车售票处按相同的操作流程(相当程序代码)同时售票一样。在上面的代码中,我们使用Thread.currentThread()静态函数获得该代码当前执行时对应的那个线程对象。得到当前线程对象后,我们又调用了线程对象的getName()方法,取出当前线程的名称字符串。代码块1处的代码能否运行呢?编译ThreadDemo1.java文件,并运行一下,看看结果如何?图5.1屏幕上不停地打印出mainisrunning,而不是mainthreadisrunning,这说明代码块1处的程序没有运行,因为代码块2先于代码块1运行,且代码块2为无限循环,代

7、码块1永远没有机会运行。同时,我们也能够看到当前线程的名称为main。我们将代码进行如下修改(为了达到对比讲解,保持上下连贯性的效果,我们对修改过的地方进行注释,而不是彻底删除掉):程序清单:ThreadDemo2.javapublicclassThreadDemo2{publicstaticvoidmain(Stringargs[]){newTestThread().start();/*run()*/1822.调用TestThread类的start函数(从Thread类继承而来的)while(true){System.out.println(

8、"mainthreadisrunning");}1.让TestThread类继承Thread类}}classTestThreadextendsThre

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

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

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