第12章线程
[内容提要]
在网络分布式编程盛行的今天,多线程编程已成为现代编程语言普遍具备的功能。
Java作为一门网络语言,从内核全面支持多线程技术。
多线程是Java程序设计的特色之一,利用多线程技术可以方便地实现任务的并发处理。
本章结合代码讲解了线程相关的基本概念,并通过几个实例重点展示Java线程的构造、调度和数据交换的方法。
1
第1节、线程的概念
一、线程的概念
在多线程程序设计中,线程是程序执行过程中一个子运行序列。
进程与程序的关系
程序是静态的代码,一个进程是某个程序的一次执行过程
例如你的机器只装了一个QQ程序,但是同时允许两个帐号登陆,那此时有两个QQ进程运行
进程与线程的关系
线程则是一个比进程更细微的程序执行序列,是进程的某个子序列
例如你上QQ后可以给甲传文件,给乙视频聊天。那此时该QQ进程管理了两个线程。分别负责传文件和视频聊天
2
进程与线程的关系
由谁管理?
线程由程序负责管理,而进程由操作系统调度。
线程依附于进程
线程依附于进程的上下文环境中,随进程或父线程执行后启动。
地址空间
多个线程使用相同的地址空间,因此线程之间的通信非常方便。
而进程之间使用不同的地址空间,可以单独执行。
3
多线程程序设计是并发程序设计的一种,各个线程之间是并行执行的,当计算机只有一个CPU时,操作系统会使用分时或其他方法来模拟并行运行的效果。
举例:如可以同时听歌和玩游戏,是操作系统把时间段分成很小的片断在两个运行的程序间切换
多线程程序设计应用非常广泛。
当我们需要在一个程序当中同时执行几段代码时,就需要用到多线程来实现。
举例:网站下载,大型科学计算等。
4
第2节线程的创建
第一种方法
,实现该类的Run()方法,然后控制线程的执行;
第二种方法
如果只要一段代码在单独线程中运行
,并将该段代码放在该接口Run()方法中,然后通过构造Thread类对象实现线程的建立和运行控制。
5
一、Thread类创建多线程应用程序
Thread类提供了用于启动、挂起、恢复以及终止线程的一系列方法,
除此之外,还提供了控制线程优先级以及线程的名字等其他方面的方法。
6
使用Thread类建造多线程程序的方法
将自定义的应用程序类继承Thread类,并覆盖其run()方法,当线程开始启动时会调用这个方法。
通过覆盖run()方法,就可以使线程在后台完成一些有用的任务。
然后,在自定义类中的main()方法,声明一个Thread类型的对象使之指向自定义应用程序类的实例。
如: Thread t1=new ExtendThreadDemo(1);
再调用start()方法启动线程,该方法会调用前面定义的run()方法,并使之脱离main()方法的主线程,在操作系统中申请新的线程运行。
如: ();//启动线程
7
例12-1
自动执行线程t1的run()方法
8
输出如下:
Creating thread 1
Creating thread 2
Thread1 is running
Thread2 is running
约过5秒,继续显示
1 is finished
2 is finished
同时有三个线程在运行,CPU同时执行,请分析每句输出是哪个线程产生的?
Thread1 Thread2
ExtendThreadDemo 类,
产生线程
Main函数
Thread1
Thread2
Thread1
Thread2
9
注意,一般创建的普通线程(也称用户线程)均会在完成自身的工作之后才会终止,main方法构成的线程称为主线程,它总是用户线程,故它总是要等它创建的子线程结束后才能结束。
与用户线程相对的是守护线程,只有当其它线程(如实际的应用程序)正在运行时才有用,一旦其他线程结束后,不管它本身的任务是否完全完成均会终止。
10
12 线程 来自淘豆网www.taodocs.com转载请标明出处.