第8章多线程机制课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第8章多线程机制课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多线程 机制 课件
- 资源描述:
-
1、第第8章章 多线程机制多线程机制8.1 线程基础线程基础8.2 线程控制线程控制8.3 线程线程同步同步8.4 注意事项注意事项8.1 线程基础线程基础 8.1.1 进程和线程进程和线程 计算机的操作系统可以同时执行多个任务。听歌的同时能够计算机的操作系统可以同时执行多个任务。听歌的同时能够打字、下载文件,在聊天窗口打字的时候对方还能通过视频打字、下载文件,在聊天窗口打字的时候对方还能通过视频看到你。看到你。多任务是指在一个系统中可以同时运行多个程序,即有多个多任务是指在一个系统中可以同时运行多个程序,即有多个独立运行的任务,每一个任务对应一个进程。独立运行的任务,每一个任务对应一个进程。由于
2、一个由于一个CPU在同一时刻只能执行一个程序中的一条指令。在同一时刻只能执行一个程序中的一条指令。实际上,多任务运行的并发机制使这些任务交替运行,因间实际上,多任务运行的并发机制使这些任务交替运行,因间隔时间短,所以感觉就是多个程序在同时运行。隔时间短,所以感觉就是多个程序在同时运行。Java语言使用多线程来实现一个程序中的多个任务同时运行。语言使用多线程来实现一个程序中的多个任务同时运行。程序员可以在程序中执行多个线程,每个线程完成一个功能,程序员可以在程序中执行多个线程,每个线程完成一个功能,并与其他并与其他8.1 线程基础线程基础 8.1.1 进程和线程进程和线程 计算机的操作系统可以同
3、时执行多个任务。听歌的同时能够打字、下载文计算机的操作系统可以同时执行多个任务。听歌的同时能够打字、下载文件,在聊天窗口打字的时候对方还能通过视频看到你。件,在聊天窗口打字的时候对方还能通过视频看到你。多任务是指在一个系统中可以同时运行多个程序,即有多个独立运行的任多任务是指在一个系统中可以同时运行多个程序,即有多个独立运行的任务,每一个任务对应一个进程。务,每一个任务对应一个进程。由于一个由于一个CPU在同一时刻只能执行一个程序中的一条指令。实际上,多任在同一时刻只能执行一个程序中的一条指令。实际上,多任务运行的并发机制使这些任务交替运行,因间隔时间短,所以感觉就是多务运行的并发机制使这些任
4、务交替运行,因间隔时间短,所以感觉就是多个程序在同时运行。个程序在同时运行。Java语言使用多线程来实现一个程序中的多个任务同时运行。程序员可以语言使用多线程来实现一个程序中的多个任务同时运行。程序员可以在程序中执行多个线程,每个线程完成一个功能,并与其他线程并发执行,在程序中执行多个线程,每个线程完成一个功能,并与其他线程并发执行,这种机制称为多线程。这种机制称为多线程。进程(进程(process)是程序的一次执行过程,是操作系统运行程序的基本是程序的一次执行过程,是操作系统运行程序的基本单位。程序是静态的,进程是动态的。系统运行一个程序就是一个进单位。程序是静态的,进程是动态的。系统运行一
5、个程序就是一个进程从创建、运行到消亡的过程。程从创建、运行到消亡的过程。系统可以为一个程序同时创建多个进程。每一个进程都有自己独立的一系统可以为一个程序同时创建多个进程。每一个进程都有自己独立的一块内存空间和一组系统资源,即使同类进程之间也不会共享系统资源。块内存空间和一组系统资源,即使同类进程之间也不会共享系统资源。操作系统进程1进程2进程3线程1线程2线程3线程具有生命周期,它包含线程具有生命周期,它包含3个状态:出生状态、就绪状态、运行状态。个状态:出生状态、就绪状态、运行状态。出生状态:用户在创建线程时处于的状态,在用户使用该线程实例调用出生状态:用户在创建线程时处于的状态,在用户使用
6、该线程实例调用start()方法之前都处于出生状态。方法之前都处于出生状态。就绪状态:用户调用就绪状态:用户调用start()之后,线程就处于就绪状态了。之后,线程就处于就绪状态了。运行状态:当线程得到系统资源后就进入运行状态。运行状态:当线程得到系统资源后就进入运行状态。8.1.2线程的生命周期线程的生命周期出生就绪执行等待休眠死亡阻塞Thread t=new Thread();t.start()t.notify()或t.notifyAll()时间片结束得到系统资源t.wait()t.sleep()t.run()例例8.1 获取当前线程对象,并输出当前线程的名称。获取当前线程对象,并输出当前
7、线程的名称。public class MainThread public static void main(String args)System.out.println(main主方法开始运行主方法开始运行);Thread currentThread=Thread.currentThread();System.out.println(成功获取当前线程对象成功获取当前线程对象);String name=currentThread.getName();System.out.println(当前线程的名称是:当前线程的名称是:+name);8.1.3 认识认识main线程线程Thread类是类是Ja
8、va语言的线程类,位于语言的线程类,位于java.lang包中。包中。该类的实例对象是线程对象,所以继承该类编写线程子类该类的实例对象是线程对象,所以继承该类编写线程子类是实现多线程的方法之一。是实现多线程的方法之一。通过通过Thread类创建线程子类的格式为:类创建线程子类的格式为:class 线程的类名线程的类名 extends Thread public void run()程序语句程序语句 Thread类的类的start()方法用于启动一个线程对象。方法用于启动一个线程对象。public void start()执行该方法后,执行该方法后,JVM启动该线程对象,并调用该线程的启动该线程
9、对象,并调用该线程的run()方法。方法。8.1.4 通过继承通过继承Thread类创建线程类创建线程 例例8.2 在项目中创建在项目中创建Writer作者类,该类继承作者类,该类继承Thread类并重写类并重写run()方法称为线程类,在主方法方法称为线程类,在主方法中创建两个作者类的实例对象,分别设置中创建两个作者类的实例对象,分别设置name属属性为性为“张三张三”和和“李四李四”,然后同时启动两个线程,然后同时启动两个线程,在控制台查看两个线程的运行情况。在控制台查看两个线程的运行情况。8.1.4 通过继承通过继承Thread类创建线程类创建线程 public class Writer
10、 extends Thread private String name=未知未知“;/声明作者名声明作者名public Writer(String name)this.name=name;/初始化作者名称初始化作者名称public void run()/重写重写run()方法方法while(true)System.out.println(name+:写一段文稿写一段文稿);/输出工作进度输出工作进度 System.out.println(name+:吸一口烟吸一口烟,放松一下。放松一下。);/输出工作状态输出工作状态 try Thread.sleep(int)(Math.random()*10
11、000);/随机休息几秒随机休息几秒catch(InterruptedException e)e.printStackTrace();public static void main(String args)Thread writer1=new Writer(“张三张三);/创建作者创建作者1线程线程Thread writer2=new Writer(“t李四李四);/创建作者创建作者2线程线程writer1.start();/张三线程开始工作张三线程开始工作writer2.start();/李四线程同时启动李四线程同时启动图图 8.2 运行结果运行结果(1)Application应用程序运行时
12、总是调用应用程序运行时总是调用main方方法,因此法,因此main是创建和启动线程对象的地方。是创建和启动线程对象的地方。main本身也是一个线程,是程序自动拥有的一个本身也是一个线程,是程序自动拥有的一个线程,称为主线程。在线程,称为主线程。在main方法中创建了两个方法中创建了两个testThread线程对象:线程对象:writer1与与writer2,并在创并在创建后马上调用建后马上调用start方法启动了这两个线程。方法启动了这两个线程。(2)从输出的结果可以看出两个线程的名字是交从输出的结果可以看出两个线程的名字是交替显示的,这是因为两个线程是同步的,于是,两替显示的,这是因为两个线
展开阅读全文