文档介绍:第10章线程
线程的概念
线程状态与生命周期
线程优先级与线程调度
线程的创建
线程同步
上个世纪80年代,线程被引入。
多线程在提高系统效率等方面有显著作用。
在单处理器的计算机上,多个线程实际上并不能并发执行。
系统可以按照某种调度策略,在线程间切换。
线程间的切换由系统在极短的时间内完成。所以给人的印象是并发执行。
进程是一个内核级的实体
进程结构的所有成分都在内核空间中,
一个用户程序不能直接访问这些数据。
线程是一个用户级的实体,
线程结构驻留在用户空间中。
能够被普通的用户级方法直接访问。
线程与进程在概念上是相关的
进程由代码、数据、内核状态和一组寄存器组成
线程由表示程序运行状态的寄存器以及堆栈组成。
一个进程可以分成几个线程来执行。进程作为系统资源分配的基本单位
线程作为操作系统调度的基本单位。同一个进程的多个线程之间可以共享资源。
程序、进程和线程的关系
程序是一段静态的代码,它是应用程序执行的蓝本;
进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程。这个过程也是进程本身从产生、发展到消亡的过程。
作为执行蓝本的同一段程序,可以被多次加载到系统的不同内存区域执行,形成不同的进程。
线程是比进程更小的单位。一个进程在其执行过程中,可以产生多个线程, 形成多个执行流。每个执行流即每个线程也有它自身的产生、存在和消亡的过程,也是个动态概念。
多线程程序设计
线程与单执行流的程序
线程与单执行流的程序很类似,但一个线程本身并不是一个程序,它必须运行于一个进程之中。
线程可以定义为一个程序中的单个执行流,
多线程是指同时存在几个执行流,按几条不同的执行线索共同工作,通过并发合作完成某项任务。
Java在语言级支持多线程,提供了很多线程操作需要的类和方法,极大地方便了程序员。而无须使用外部的线程支持库。
Java中的线程模型
在Java中,线程模型就是一个虚拟CPU、程序代码和数据的封装体。代码与数据相互独立。
一个虚拟的CPU
该CPU执行的代码
当两个线程执行同一个类的实例代码时,它们共享相同的代码。
代码所操作的数据
当两个线程对同一个对象进行访问时,它们将共享数据。
每个Java程序都有一个缺省的主线程。
Java应用程序总是从主类的main方法开始执行。
发现main方法之后,就会启动主线程,负责执行main方法。
在main方法的执行中再创建的线程,就称为程序中的其它线程。
如果main方法中没有创建其他的线程,那么当main方法执行完最后一个语句,即main方法返回时,JVM就会结束我们的Java应用程序。
如果main方法中又创建了其他线程,那么JVM就要在主线程和其他线程之间轮流切换,保证每个线程都有机会使用CPU资源,main方法即使执行完最后的语句,JVM也不会结束我们的程序,JVM一直要等到程序中的所有线程都结束之后,才结束我们的Java应用程序。
Java中的线程
public class Example10_1
{ public static void main(String args[])
{ Lefthand left;
Righthand right;
left=new Lefthand() ; //创建线程
right=new Righthand();
();
();
for(int i=1;i<=6;i++)
{ ("我是主线程");
}
}
}
class Lefthand extends Thread
{ public void run()
{ for(int i=1;i<=10;i++)
{
("我是左手线程");
}
}
}
class Righthand extends Thread
{ public void run()
{ for(int i=1;i<=9;i++)
{ ("我是右手线程");
}
}
}