第11章线程
第11章 线程
线程的概念 ■程序是一段静态的代码,它是应用程序执 行的蓝本 一个进程既包括其所要执行的指令,也包 括了执行指令所需的任何系统资源,如CPU 内存空间、IO端口等,不同进程所占用的 系统资源相对独立 线程是进程执行过程中产生的多条执行线 索,是比进程单位更小的执行单位
线程的概念 § 程序是一段静态的代码,它是应用程序执 行的蓝本 § 一个进程既包括其所要执行的指令,也包 括了执行指令所需的任何系统资源,如CPU、 内存空间、I/O端口等,不同进程所占用的 系统资源相对独立 § 线程是进程执行过程中产生的多条执行线 索,是比进程单位更小的执行单位
线程的结构 虚拟CPU,封装在 java. lang Thread类中,它 控制着整个线程的运行 执行的代码,传递 给 Thread类,由 CPU Thread类控制顺序 处理的数据,传递给 执行 Thread类,是在代码 执行过程中所要处理 Cod Dat 的数据
线程的结构 CPU Code Data 虚拟CPU,封装在 java.lang.Thread类中,它 控制着整个线程的运行 执行的代码,传递 给Thread类,由 Thread类控制顺序 执行 处理的数据,传递给 Thread类,是在代码 执行过程中所要处理 的数据
线程与进程 线程在形式上同进程十分相似一都是用 个顺序执行的语句序列来完成特定的功能 不同之处: 线程没有入口,也没有出口,因此其自身不能 自动运行,而必须栖身于某一进程之中,由进 程触发执行 在系统资源的使用上,属于同一进程的所有线 程共享该进程的系统资源,但是线程之间切换 的速度比进程切换要快得多
线程与进程 § 线程在形式上同进程十分相似—都是用一 个顺序执行的语句序列来完成特定的功能 § 不同之处: § 线程没有入口,也没有出口,因此其自身不能 自动运行,而必须栖身于某一进程之中,由进 程触发执行 § 在系统资源的使用上,属于同一进程的所有线 程共享该进程的系统资源,但是线程之间切换 的速度比进程切换要快得多
进程与线程的区别 文俐各种系统资源腧入输出装置 文們各种系统资源隃入输出装置 数据区段 数据区段 程序区段 程序区段 只有一个地方在执行 同时有数个地方在执行 传统的进程 多线程的任务
进程与线程的区别 文件 各种系统资源 输入输出装置 数据区段 程序区段 只有一个地方在执行 文件 各种系统资源 输入输出装置 数据区段 程序区段 同时有数个地方在执行 传统的进程 多线程的任务
多线程的优势 ■多线程编程简单,效率高。使用多线程可 以在线程间直接共享数据和瓷源,而多进 程之间不能做到这一点 适合于开发服务程序 如Web服务、聊天服务等 适合于开发有多种交互接口的程序 如聊天程序的客户端、网络下载工具 适合于有人机交互又有计算量的程序 如字处理程序Word、 Excel等
多线程的优势 § 多线程编程简单,效率高。使用多线程可 以在线程间直接共享数据和资源,而多进 程之间不能做到这一点 § 适合于开发服务程序 § 如Web服务、聊天服务等 § 适合于开发有多种交互接口的程序 § 如聊天程序的客户端、网络下载工具 § 适合于有人机交互又有计算量的程序 § 如字处理程序Word、Excel等
线程的状态 Java的线程是通过Java的软件包 java. lang中 定义的类 Thread来实现的 生成一个 Thread类的对象之后,就产生了 线程。通过该对象实例,可以启动线程、终 止线程,或者暂时挂起线程等 Thread类本身只是线程的虚拟CPU,线程所 执行的代码是通过方法runO来完成的,方 法runO称为线程体 在一个线程被建立并初始化以后,Java的运彳 时系统就自动调用run(O方法,正是通过run(O方 法才使得建立线程的目的得以实现
线程的状态 § Java的线程是通过Java的软件包java.lang中 定义的类Thread来实现的 § 当生成一个Thread类的对象之后,就产生了一 个线程。通过该对象实例,可以启动线程、终 止线程,或者暂时挂起线程等 § Thread类本身只是线程的虚拟CPU,线程所 执行的代码是通过方法run() 来完成的,方 法run()称为线程体 § 在一个线程被建立并初始化以后,Java的运行 时系统就自动调用run()方法,正是通过run()方 法才使得建立线程的目的得以实现
线程的状态 线程一共有四种状态:新建(new)、可运 行状态( runnable)、死亡(dead)及堵塞 (blocked 等待 waitO 睡眠 就绪 I/O流阻塞 挂起 new Thread 运行 阻塞 创建新线程 可运行态 不可运行态 stop run(exit resume topo notify/notify pO 死亡 O指令
线程的状态 § 线程一共有四种状态:新建(new)、可运 行状态(runnable)、死亡(dead)及堵塞 (blocked) new Thread() 创建新线程 可运行态 start() 不可运行态 stop() stop() 死亡 yield() stop() run()exit suspend() sleep() wait() I/O流阻塞 resume() notify()/notify All() I/O指令 等待 睡眠 挂起 阻塞 就绪 运行
新建 线程对象刚刚创建,还没有启动,此时还 处于不可运行状态 Thread thread new Thread( test") 此时线程 thread处于新建状态,但已有了相应的 内存空间以及其它资源
新建 § 线程对象刚刚创建,还没有启动,此时还 处于不可运行状态 Thread thread = new Thread(“test”) 此时线程thread处于新建状态,但已有了相应的 内存空间 以及其它资源
可运行状态 runnable 此时的线程已经启动,处于线程的mun0方 法之中。这种情况下线程可能正在运行, 也可能没有运行,只要CPU一空闲,马上就 调用线程的sar0方法可使线程处于“可运 行”状态 thread. start
可运行状态runnable § 此时的线程已经启动,处于线程的run()方 法之中。这种情况下线程可能正在运行, 也可能没有运行,只要CPU一空闲,马上就 会运行 § 调用线程的start()方法可使线程处于“可运 行”状态 thread.start();