Java程序设计教程-电子教案 第10章 Java多线程

合集下载

java程序设计教程雍俊海

java程序设计教程雍俊海

java程序设计教程雍俊海Java程序设计是一门广泛使用的计算机编程语言,它以其跨平台的特性、面向对象的编程范式以及强大的功能而闻名。

雍俊海教授所著的《Java程序设计教程》是一本深入浅出、系统全面的Java语言学习教材,适合初学者和有一定基础的开发者进一步深入学习。

第一章:Java语言概述Java语言由Sun Microsystems公司(现为Oracle公司)在1995年发布,其设计目标是“一次编写,到处运行”(Write Once, Run Anywhere,简称WORA)。

Java是一种强类型、面向对象的语言,支持多线程编程,拥有丰富的标准库。

第二章:Java开发环境搭建在开始Java编程之前,需要搭建Java开发环境。

这包括安装Java Development Kit(JDK),配置环境变量,以及选择一个适合的集成开发环境(IDE),如Eclipse或IntelliJ IDEA。

第三章:Java基础语法Java的语法结构与其他C语言系的编程语言相似,包括变量声明、数据类型、运算符、控制结构(如if-else语句、循环语句)等。

本章将详细介绍这些基础语法的使用方法。

第四章:面向对象编程Java是一种面向对象的语言,这意味着它将现实世界中的事物抽象成对象,并通过类(Class)和对象(Object)来组织代码。

本章将介绍类和对象的概念、构造方法、封装、继承和多态等面向对象的核心概念。

第五章:控制流程语句控制流程语句是程序中控制执行流程的语句,包括条件语句、循环语句和跳转语句。

本章将深入讲解这些语句的用法和应用场景。

第六章:数组和字符串数组是Java中存储固定大小的同类型元素的集合,字符串是字符的序列。

本章将介绍数组的声明、初始化和遍历,以及字符串的各种操作方法。

第七章:集合框架Java的集合框架提供了一套接口和类,用于存储和操作集合对象。

本章将介绍List、Set、Map等集合的使用方法和特点。

10-java多线程PPT优秀课件

10-java多线程PPT优秀课件
第十章 多线程
本讲内容
11.1 线程的概念 11.2 线程的状态 11.3 多线程编程 11.4 线程同步
2
11.1 线程的概念
人们常说做事情要一心一意,不能三心二意。 在现实世界中,其实很多事情可以并发执行的。比如,
人体在接受外界信息时,视觉、嗅觉、听觉、味觉、 触觉这些感知器官统统都是并发执行的。所谓眼观六 路、耳听八方。 随着科学技术的发展,计算机也进入了三心二意的时 代。大家在使用计算机的时候,可以同时运行两个甚 至两个以上的程序:比如一边听歌、一边上网看新闻, 还可以同时下载电影。
操作系统的进程并发机制可以帮助我们实现这一目的。
实际情况是由操作系统负责管理 CPU 等硬件资源的分 配,通过采用时间片原理,以非常小的时间间隔交替 执行多个程序。
因此,给我们大家一种多个程序被同时执行的错觉, 即并发执行。
上网 听歌
5
我们把支持并发执行的操作系统称为多任务操 作系统。
操作系统不仅要管理计算机的各个硬件资源 (例如CPU)的分配,还要管理软件的执行。
15
线程的生命周期
notify( )
CPU run( )
start( )
调度
sleep( )
stop( )
创建
就绪
运行
非运行
停止
wait( )
16
11.3 多线程编程
Java中有两种方法来创建一个新的线程:
➢ 继承 Thread 类 ➢ 实现 Runnable 接口
无论采用哪种方法,都要使用到Thread类及其 相关的方法。
Java与多线程
Java语言的一个重要特点就是对多线程的支持, 它使得编程人员可以很方便地开发出具有多线程 功能、能同时处理多个任务的应用程序。

Java程序设计-电子教案 10章多线程

Java程序设计-电子教案  10章多线程

上面的代码段中,在单线程中,前一个循环如果不执行完,那么就不可能执行第二个循环。 要使两个循环同时执行,需要编写多线程的程序。
《 Java 程序设计》课程
10.1 进程与线程
(2)多线程的优缺点 如果一能一次只做一件事,并把它做好,那当然不错。但万事万物并非如此,人体一直在并发地做许多事 情。如:人可以并发地进行呼吸、血液循环、消化食物等活动,所有感觉器官:视觉、触觉、嗅觉均能并发工 作。计算机也能并发工作,个人电脑可以一边编程,一边打印,这已经是很平常的事。 很多应用程序是用多线程实现的,如360安全卫士,我们打开360安全卫士后,可以“扫描系统漏洞”,同 时也可以“清理系统垃圾文件”,也可以同时扫描病毒和杀毒。这就是典型的多线程应用程序,即看上去在同 一时刻,可以运行多个程序,即可以同时做多个事情。
《 Java 程序设计》课程
10.2 线程的实现
10.2.1 项目(10-1)描述
模拟多线程卖票程序(车票作为共享资源的方式)。
10.2.2 项目知识准备
在JAVA中如果要实现多线程,由两种方法可以实现:一种是继承Thread类,另一种就是实现Runnable接 口。下面分别介绍这两种方式的使用。
注意:多线程的优势主要有:①减轻编写交互频繁、涉及面多的程序的困难; ②程序的吞吐量会得到改善; ③有多个处理器的系统,可以并发运行不同的线程.(否则,任何时刻只有一个线程在运行)。 换句话说,多线程最大的优势是:解决了多部分代码同时运行的问题。 但是应用程序的执行都是CPU在做着快速的切换完成的。这个切换是随机的,是由时间片来切换的。即在同一 个时间点,只能执行一个程序。所以当系统同时开启多个应用程序后,每个应用程序被切换的概率就下降了, 所以效率就下降了。

java多线程编程PPT课件

java多线程编程PPT课件

一、线程的概念
线程的状态与生命周期
每个线程都与生命周期相关联,一个生命周期含有多个可 以互相转换的状态,线程从产生到消亡的生命周期中要经历创 建、就绪、运行、阻塞和死亡五种状态。通过线程的控制与调 度可使线程在这几个状态间转换,每个Java程序中都拥有一个 与main方法对应的主线程,必须在主线程中创建新的线程。
(1)创建状态:当一个Thread类或其子类的对象被声明并创 建后,该线程对象就处于创建状态。创建状态是线程已经创建 但未开始执行的一个特殊状态。处于创建状态的线程只是一个 空的线程对象,系统不为它分配资源但有自己的内存空间,通 过调用start()方法进入就绪状态。
一、线程的概念
(2)就绪状态:处于就绪状态的线程已经具备运行条件但还未获得时间 片,因此进入线程队列,等待系统为其分配CPU。一旦获得CPU,该线程 便进入运行状态并自动调用自己的Run()方法。
(5)死亡状态:死亡状态是线程生命周期的最后一个阶段,表示线程已 经退出运行状态并且不再进入就绪队列。当线程的run()方法结束或由于其 它原因被终止后,线程便进入消亡状态。线程的终止分为两种形式:一是 自然死亡即线程的run()方法正常结束,二是强制终止线程,如调用destory() 或stop()命令终止线程。
public class ng.0bject{ …… public final void notify();//通知方法 public final void notifyAll(); //通知所有的等待 public final void wait();//等待方法 public final void wait(long timeout); public final void wait(long timeout,int nanos);

第10章 Java的线程处理

第10章   Java的线程处理

10章 第10章
Java的线程处理 Java的线程处理
class Test implements Runnable { int i; public void run() { while (true) { System.out.println("Hello " + i++); if (i == 10) break; } } }
Runnable(可运行状态):一旦线程调 用 了 start() 方 法 , 线 程 就 转 到 Runnable()状态。注意,如果线程处 于Runnable状态,它也有可能不在运 行,这是因为还存在优先级和调度问题。 blocked(阻塞/挂起状态):线程处于阻 塞状态。这是由两种可能性造成的:因 挂起而暂停;由于某些原因而阻塞,例 如等待IO请求的完成等。
10章 第10章
Java的线程处理 Java的线程处理
通常,我们把操作系统的多个任务称为 进程(Process),而程序中的多任务则 称为线程。 区别: 每个进程都拥有一组完整的属于 : 自己的变量,而线程则共享这些数据。 线程不如进程安全,但线程的优势在于 创建和注销线程的开销比运行新的进程 少得多,所以现在主流的操作系统都支 持多线程。而且,和进程间的通信相比, 线程间的通信要快得多,也方便得多。
10章 第10章
Java的线程处理 Java的线程处理
10.1.1 线程 如图10.2中所示,一个线程是给定的 指令的序列 (你所编写的代码)、一个栈(在 给定的方法中定义的变量),以及一些共享 数据(类一级的变量)。
10章 第10章
Java的线程处理 Java的线程处理
Java Virtual Machine
10章 第10章

java学习第10章PPT教学课件

java学习第10章PPT教学课件
由调度程序调用,当run()方法返回时, 该线程停止
使调用它的线程立即停止执行
使线程睡眠n毫秒,n毫秒后,线程可以 再次运行
使线程挂起,暂停运行Not Runnable
恢复挂起的线程,使处于可运行状态 Runnable
将CPU控制权主动移交到下一个可运行 线程
2、Thread类的主要方法
setName(String) getName() getPriority() setPriority(int) join()
赋予线程一个名字
取得由setName()方法设置的线程名字的 字符串
返回线程优先级
设置线程优先级
当前线程等待调用该方法的线程结束后, 再往下执行
setDaemon(boole an )
设置该线程是daemon线程还是用户线程, Daemon线程也称服务线程,通常编 成无限循环,在后台持续运行。
例10-1 直接继承Thread类实现多线程
第10章 多线程机制
1.1 Java线程的概念 1.2 Java多线程编程方法 1.3 线程的控制 1.4 线程资源的同步处理
1.多进程
多进程的缺点: • 进程切换开销大; • 进程间的通信很不方便。
2.多线程
• 多线程则指的是在单个程序中可以同时运行多个 不同的线程,执行不同的任务
• 线程切换的开销小 。
例10-2 计数按钮的设计
import java.applet.*; import java.awt.*; class countbutton extends Button implements Runnable {
int count=0; public countbutton(String s) { super(s); } public void run() {

《Java程序设计教程(第2版)》课件 第10章

《Java程序设计教程(第2版)》课件 第10章

处于运行状态的线程 如果因为某种原因不 能继续执行,就进入 阻塞状态。
处于就绪状态的线 程获得CPU资源后 即处于运行状态。
当线程执行完run()方法中的 内容或被强制终止时,则处 于死亡状态。至此,线程的 生命周期结束。
线程的控制
目录
CONTENTS
01
线程的优先级
02
线程休眠
03
线程等待
04
该线程。
3
线程等待
线程等待
案例描述 模拟课堂:老师讲课时提出问题,学生回答,回答完毕后老师继续讲课。 问题分析: ➢ 定义线程类Student继承Thread类,在重写的run()方法中输出“学生回答问题3
2
线程休眠
线程休眠
案例描述 模拟红绿灯:红灯亮10 s,绿灯亮10 s,黄灯亮2 s。
问题分析: ➢ 定义线程类TrafficSignal继承Thread类。 ➢ 在重写的run()方法中循环输出“红灯亮”“绿灯亮”和“黄灯亮”,并
使用sleep()方法限制灯亮的时间。 ➢ 在公共类的main()方法中创建TrafficSignal类对象,并调用start()方法启动
}
}
实现Runnable接口
2.创建与启动线程
首先基于定义的线程类创建对象,然后将该对象作为Thread类构造方法的 参数,创建Thread类对象,最后通过Thread类对象调用start()方法启动线程。
案例: ➢ 定义MyThread类实现Runnable接口,在其中重写run()方法,实现循环10次,
继承Thread类
1.Thread类
Thread类常用的方法:
方法 Thread currentThread()

Java多线程PPT课件

Java多线程PPT课件
线程又称为轻量级进程,它和进程一样拥有独立的执行控制, 由操作系统负责调度,区别在于线程没有独立的存储空间, 而是和所属进程中的其它线程共享一个存储空间。这使得线 程间的通信远较进程简单,而进程之间的通信则比较困难, 另外在资源的占用上,线程比进程要小。
5
线程(Thread)和进程(Process)的关系很紧密,进程和 线程是两个不同的概念,进程的范围大于线程。
7
执行主线程示例。
//MainThreadDemo.java public class MainThreadDemo { public static void main(String args[]) { Thread t = Thread.currentThread(); System.out.println("当前线程名称是: " + t.getName()); t.setName("MyJavaThread"); System.out.println("改名后线程名称是: " + t.getName());
}
}
11
最初,程序员们用所掌握的有关机器底层的 知识来编写中断服务程序,主进程的挂起是 通过硬件中断来触发的。
尽管这么做可以解决问题,但是其难度太大, 而且不能移植,所以使得将程序移植到新型 号的机器上时,既费时又费力。
12
我们只是想把问题切分成多个可独立运行的 部分(任务),从而提高程序的响应能力。 在程序中,这些彼此独立运行的部分称之为tem.out.println("传送文件2");
Thread.sleep(100 * 10);
System.out.println("文件2传送完毕");

Java电子教案第10章精品PPT课件

Java电子教案第10章精品PPT课件

程序 目的端
Java I/O类层次结构
图10.2 Java流类层次结构图(1)
图10.2 Java流类层次结构图(2)
File类概述
构造方法
10.3 File类
path)
方法名
path,String name) dir,String name)
方法功能
如果path是实际存在的路径,则 该File对象表示的是目录;如果 path是文件名,则该File对象表 示的是文件。
File类应用实例
【例10-1】文件和文件对话框应用 //文件和文件对话框演示 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class extends JFrame implements ActionListener {
10.1 HappyChat文件应用分析
文件在HappyChat聊天系统中的应用主要体现在以 下几个方面:
用户注册信息
➢ 用户注册时需要将信息发送到服务器端,服务器端通过用户名是 否重复的验证后,将该用户注册信息保存到服务器端的注册文件 中,在用户登录和用户注册时通过读取该文件信息进行相关验证
表10.1 File类常用方法
J类
构造方法
J() J() J(, fsv) J( fsv)
方法名
J(String currentDirectoryPath) J(String currentDirectoryPath, fsv)
方法功能
构造一个指向用户默认目录的 J 使用给定的 File 作为路径来构造一个 J 使用给定的当前目录和 构造一个 J。 使用给定的 构造一个 J。

第10讲 Java多线程

第10讲 Java多线程

据空间(进程的上下文),在两个文件复制进程间切换
需要额外 的开销,这样反而比先执行完C盘到D盘的复
制,再启动E盘向F盘的复制慢。
J2EE_Struts
7
© 2010 IBM Corporation
IBM 课程体系
进程与什线么程是的线程概念
线程是进程中的实体,进程是线程的集合。 在单线程应用中,程序代码按调用顺序依次往下执行,在这种情 况下,当主函数(方法)调用了子函数(方法),主函数必须等待子 函数返回后才能继续往下执行,不能实现两段程序代码同时交替 运行的效果。如果要一个程序中实现多段代码同时交替运行,就 需要产生多个线程,并指定每个线程上所要运行的程序代码,这 就是多线程。
t.setDaemon(true); 设置为后台线程 t.start();
}
}
J2EE_Struts
15
© 2010 IBM Corporation
IBM 课程体系
后台线联程合与线联程合线程
public class ThreadDemo implements Runnable{
public void run(){
while(true){
System.out.println("thread-1 is running");
}
}
public static void main(String[] agrs)throws Exception{
Thread t=new Thread(new ThreadDemo());
t.start();
new ThreadDemo().start(); 开启线程 }
}
J2EE_Struts
11

第10章多线程PPT精品精品文档

第10章多线程PPT精品精品文档

多线程对象实现Runnable接口并且在 该类中定义用于启动线程的run方法。
后一种方法的好处在于多线程应用对象 可以继承其它对象而不是必须继承 Thread类,从而能够增加类定义的逻辑 性。
电脑基础·实例·上机系列丛
清华大学出版社
如何实现多线程
Java程序设计教程
这两种方法解决了Java实现多线程的技 术障碍,是多线程技术实现的核心部分。 下面通过例子演示如何使用这两种方法 来实现多线程技术。
电脑基“础死·实例亡·上”机。系列丛
清华大学出版社
线程的生命周期
Java程序设计教程
运行(Running):线程获得了CPU 资源正在执行任务,将一直运行到结 束,除非此时它自动放弃资源或有更 加高优先级的线程进入。
电脑基础·实例·上机系列丛
清华大学出版社
线程的生命周期
Java程序设计教程
阻塞(Blcked):线程是可以执行的, 但由于某些因素的阻碍处于停滞状态, 系统排程器略过了应给线程的CPU执 行时间。
Java程序设计教程
类“DrawLine”运行结果
类 “ D raw Line” 运 行 结 果
电脑基础·实例·上机系列丛
清华大学出版社
Java程序设计教程
继承Thread类,覆盖方法run()
这种方法简单明了,符合大家的习惯。 但是,它也有一个很大的缺点,那就是 如果类已经从一个类继承,则无法再继 承Thread类。
电脑基础·实例·上机系列丛
清华大学出版社
Java程序设计教程
线程执行的主要组成部分
电脑基础·实例·上机系列丛
清华大学出版社
什么是线程
Java程序设计教程
代码可以由多个线程共享,也可以不被 共享,这些都和数据是独立的。两个线 程如果执行同一个类的实例代码,则它 们可以共享相同的代码。

第10章(第2版)-Java程序设计教程(第2版)-牛晓太-清华大学出版社

第10章(第2版)-Java程序设计教程(第2版)-牛晓太-清华大学出版社

10.1.2 多线程编程的难点
3.调试程序
❖由于操作系统调度的随机性,每次多线程程序的运行顺序 都不一致。若程序有Bug,并不是每次运行都会导致错误的 结果,某些调度顺序可能会得到正确的结果。在调试程序时, 有可能该Bug一直都无法重现,大大增加了调试程序的难度。
10.2 线程的实现
❖10.2.1 创建Java线程 ❖10.2.2 Java线程的状态 ❖10.2.3 Java线程的优先级 ❖10.2.4 守护线程 ❖10.2.5 终止另一个线程
10.2.2 Java线程的状态
3.阻塞状态(Blocked) ❖当线程想要获得一个锁,而这个锁被其它线程占有,则该 线程进入阻塞状态。当其它线程释放了锁,而调度机制又允 许此线程获得该锁,则线程就从阻塞状态变更为可执行状态。
4.等待状态(Waiting) ❖为实现同步,线程执行时需要检测一些条件,只有条件得 到满足才能继续执行。若条件未得到满足,则线程进入等待 状态。当其它线程完成某些任务后,会发出一个信号唤醒处 于等待状态的线程,这些线程再重新检测条件是否得到了满 足。
10.1.1 多线程编程的优势
3.使GUI更有效率
❖使用单线程处理GUI事件,必须使用循环对随时可能发生 的GUI事件进行扫描,在循环内部除了扫描GUI事件外,还 要执行其他的程序代码。若这些代码太长,则GUI事件会被 “冻结”,直到这些代码被执行完为止。现代的GUI框架 (如SWING、AWT和SWT)中都使用了一个单独的事件分 派线程(event dispatch thread,EDT)来对GUI事件进 行扫描,可有效降低事件处理的复杂性。
10.1.2 多线程编程的难点
1.访问共享资源
❖有时多个线程会访问同一资源,若不做任何限制,让多个 线程以任意的调度顺序对该资源进行任意的读写操作,则可 能出现丢失修改、读脏数据等错误。因此,多线程访问共享 资源时,必须通过加锁实现互斥访问。若加锁方式不正确, 则可能造成死锁,使程序无法继续运行。

Java程序设计入门 第2版 第10章多线程

Java程序设计入门 第2版 第10章多线程

线程入门
创建线程
线程状态
线程的常用方法
实现Runnable接口创建线程的步骤如下 :
线程状态
线程的常用方法
继承Thread类创建线程的步骤如下:
1
创建一个类继承Thread类,重写run( )方法,将所要完成的任务代码写进run( )方法中。
I/O流类的层次结构
2
创建Thread类的子类的对象。
3
调用该对象的start( )方法,该start( )方法表示开启线程, 然后交给CPU自动调用run( )方法,程序中不需要调用run( )方法
10.1.2 进程与线程
线程入门
创建线程
线程状态
线程的常用方法
所以,线程就是进程中负责程序执行的控制单 元(执行路径),一个进程可以有多个执行路径, 称为多线程。就像我们再使用QQ给多个好友聊天一 样,每一个聊天过程都是一个线程,这些线程都属
I/O流类的层次结构
于QQ这个进程。
开启多线程就是为了同时运行多部分代码。 每一线程都有自己运行的内容,这个内容可以称为线程要执行的任务。
光景不待人,须臾发成丝——李白《相逢行》
目录
CONTENTS
10.1
线程入门
• 10.1.1 操作系统与进程 • 10.1.2 进程与线程
10.1 线程入门
线程入门
创建线程
线程状态
线程的常用方法
什么是线程?
I/O流类的层次结构
10.1 线程入门
线程入门
创建线程
线程状态
线程的常用方法
想一想 在程I/序O中流类应的用层程次序结可构以 像这些事物同时活动吗?
在程序中,不同程序段是可以同时运行的。

《Java多线程课件》

《Java多线程课件》

Com pletableFuture
异步
通过工厂方法supplyAsync()创建 异步线程执行函数,并返回 CompletableFuture对象。
回调
通过thenApply()、thenAccept() 或者thenRun()方法对异步线程 返回结果进行处理。
异常处理
通过exceptionally()方法或者 handle()方法对异步计算异常进 行处理。
Java多线程课件
多线程是指程序的并发处理能力,可以充分利用CPU资源,提高程序的执行 效率。
线程的生命周期
新建
线程刚被创建但还没有启动。
就绪
线程启动但还未被分配CPU时Fra bibliotek 片。运行
线程正在执行任务。
终止
线程执行完任务或出现异常而终 止。
线程的创建和启动
继承Thread类
重写run()方法并调用start()方法启动线程。
Callable
类似于Runnable,但可以返回结果和抛出异常。
Future
代表异步计算的结果,可以查询计算状态是否完成, 或者取消计算。
线程安全性
线程安全性是指多个线程同时访问同一份数据时,不会出现意料之外的结果。可以通过同步机制或避免共享数 据的方式提高线程安全性。
线程安全的容器
Java提供了多种线程安全的容器,如ConcurrentHashMap、CopyOnWriteArrayList等,保证多线程环境下读 写安全。
并发编程的思考方式
并发编程不仅仅是技术问题,更是一种思考方式。要遵循下列原则:清晰简 单、避免共享、尽可能并发、并发安全。
多线程的应用场景
多线程主要用于提高并行计算能力和处理IO密集型任务。例如Web服务器的请求处理、文件下载、多媒体渲 染等。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

10.2 线程的生命周期
3.中断
处于运行状态的线程必须在运行一段时间 后让出计算机资源,这就是线程的中断。中断 原因包括:
阻塞 线程调度器的控制 通过sleep(long mill)方法 通过wait()方法
10.2 线程的生命周期
当线程中断解除时(例如:通过Scanner类的 方法输入了数据、经过mill毫秒后休眠结束),线
10.1 Java多线程处理机制
在Java语言的运行环境中(JVM),内置 了一个线程调度器,用于确定某一时刻由哪一 个线程占用计算机资源进行执行,从而实现了 多线程操作。当Java程序开始运行时,main() 方法首先执行,此时线程调度器会开启一个线 程,即为主线程(Java Applet的主线程是Web 浏览器),负责main()方法的执行,除主线程 之外的线程被称为其它线程。
10.3 创建线程的方法
例10-2 import java.util.Date; import java.awt.Graphics; public class Example10_2 extends java.applet.Applet implements Runnable{ Thread clockThread; public void start(){ if (clockThread == null){ clockThread = new Thread(this, "Clock"); clockThread.start(); } }
程并不会立刻返回运行状态,而是重新进入等待队
列进行排队,并依据队列先进先出的使用原则,占 用计算机资源,进入运行状态。 4.死亡 线程执行完毕后,就进入了最后的死亡状态, 线程的生命周期同时结束。
10.3 创建线程的方法
Java多线程的实现是通过创建线程对象开
始的。线程对象的创建有两种方法——利用
10.2 线程的生命周期
线程从最初的创建直至最后执行的结束,需要遵 循一个生命周期。利用生命周期,使得线程更加容易 被分析和控制。线程的生命周期分为四个阶段——新 建、运行、中断、死亡。转换过程如下图:
新建
入队
等待队列
出队
运行
执行结束
中断解除 中断 图10.1线程生命周期 导致中断 死亡
10.2 线程的生命周期
10.3 创建线程的方法
例10-1
class SimpleThread extends Thread{ public void run(){ for (int i = 0; i < 3; i++){ System.out.println(getName()+i); try{ sleep((int)(Math.random() * 1000)); }catch (InterruptedException e) { System.out.println(e); } } System.out.println("DONE! " + getName()); } }
Thread类的子类创建线程和使用Runnable接口
创建线程。两种方法相比,第一种较为简单,
第二种更加灵活。
10.3 创建线程的方法
1.利用Thread类的子类创建线程 Thread类位于ng包中,是Java语 言提供的线程类。定义一个继承Thread类的 子类,在该类中重写Thread类中的public void run()方法,当子类对象——线程对象 获得资源时,会调用run()方法,执行线程操 作。
第10章 Java多线程
本章内容提要
1 3 2 3 4 5 3 6
Java多线程处理机制线程的生命周期源自创建线程的方法线程同步
线程联合 守护线程
10.1 Java多线程处理机制
在程序设计中,经常会遇到多个任务同时 执行的情况,这种资源被交替占用的任务执行 过程,被称为多线程处理,其中,每个任务一 次动态执行过程被称为进程。进程执行过程中 的暂停被称为中断。进程通过中断被分解成了 若干段,每一段被称为一个线程。
10.3 创建线程的方法
2.使用Runnable接口对象创建线程
利用Thread类定义直接线程对象,此时,调用 的Thread类的构造方法需要设置一个对象做参数, 而定义该对象的类必须实现ng.Runnable接 口,这个对象被称为线程对象的目标对象。 Runnable接口中定义了public void run()方法, 定义目标对象的类使用了Runnable接口,必须重写 其中的public void run()方法。
1.新建 线程对象定义后,线程直接进入新建状态。处于 新建状态的线程不占用计算机资源。 2.运行 当线程占用计算机资源时,就进入了运行状态。 线程由新建状态转入运行状态并不是直接完成的,需 要进入一个由进程调度器控制的等待队列,等待计算 机资源的闲置(被其它线程释放),当计算机资源闲 置时,依据队列的先进先出性,最先进入等待队列的 线程最先出队,获得计算机资源,转入运行状态。
10.3 创建线程的方法
public void run( ) { while (clockThread != null){ repaint(); try{ clockThread.sleep(1000); }catch (InterruptedException e){ System.out.println(e); } } }
10.3 创建线程的方法
public void paint(Graphics g) { Date now = new Date(); g.drawString(now.toString(), 5, 10); } public void stop(){ clockThread.stop(); clockThread = null; } }
10.3 创建线程的方法
class Example10_1{ public static void main (String args[ ]){ SimpleThread one = new SimpleThread(); one.setName("oneThread"); one.start(); SimpleThread two = new SimpleThread(); two.setName("twoThread"); two.start(); } }
相关文档
最新文档