[计算机软件及应用]《移动通信软件编程基础—java语言》第11章

上传人:tia****nde 文档编号:70484947 上传时间:2019-01-17 格式:PPT 页数:37 大小:1.51MB
返回 下载 相关 举报
[计算机软件及应用]《移动通信软件编程基础—java语言》第11章_第1页
第1页 / 共37页
[计算机软件及应用]《移动通信软件编程基础—java语言》第11章_第2页
第2页 / 共37页
[计算机软件及应用]《移动通信软件编程基础—java语言》第11章_第3页
第3页 / 共37页
[计算机软件及应用]《移动通信软件编程基础—java语言》第11章_第4页
第4页 / 共37页
[计算机软件及应用]《移动通信软件编程基础—java语言》第11章_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《[计算机软件及应用]《移动通信软件编程基础—java语言》第11章》由会员分享,可在线阅读,更多相关《[计算机软件及应用]《移动通信软件编程基础—java语言》第11章(37页珍藏版)》请在金锄头文库上搜索。

1、移动通信软件编程基础 Java语言,知识回顾,I/O输入 与输出,基本文件操作,字节流,字符流,File类,使用流,FileInputStream类和FileOutputStream类,控制台输入流System.in,过滤流,缓冲流,包装流,字节流和字符流的比较,FileReader类与BufferedReader类,FileWriter类与BufferedReader类,11,多线程,第,章,本章目标,线程的基本概念,Java中线程的实现方法,线程的优先级,Java中同步的实现,死锁及其解决方法,进程的基本概念,进程1,存储器,动态堆,静态数据,程序代码,存储器,堆栈,进程2,存储器,动态堆

2、,静态数据,程序代码,存储器,堆栈,进程间的关系比较疏远; 各个进程是在自己独有的地址空间内执行。,线程的基本概念,进程,动态堆,静态数据,程序代码,寄存器,堆栈,寄存器,堆栈,存储器,线程1,线程2,线程的基本概念,线程是进行中的实体,一个进程中可以包含一个或多个线程。 一个线程在执行期间同样有一个开始,一个执行序列和一个结束点。 单个线程不是一个程序,并不能依靠自身单独执行,它必须在程序中执行。 基于线程的多任务处理环境中,线程是最小的处理单位。实现多任务需要多线程。,线程的基本概念,多线程: 在Java中,一个应用程序可以包含多个线程。每个线程执行特定的任务,并可与其他线程并发执行。 多

3、线程使系统的空转时间减少,提高CPU利用率。 多线程编程环境用方便的模型隐藏CPU在任务间切换的事实。,主线程,public class MainThreadDemo public static void main(String args) /获得主线程的一个引用 Thread t = Thread.currentThread(); /输出线程信息 System.out.println(t); ,运行 结果,输出默认的线程信息 Threadmain,5,main,Thread类的常用方法,Thread类常用方法的使用,public class CreateThreadDemo public s

4、tatic void main(String args) Thread T = Thread.currentThread(); System.out.println(T); T.setName(“ThreadNew“); System.out.println(T); for(int i = 0; i10; i+) System.out.println(i); try T.sleep(1000); catch(InterruptedException ie) ie.printStackTrace(); ,创建一个线程类,class MyThread extends Thread public M

5、yThread(String name) super(name); public void run() for(int i = 0; i10; i+) System.out.println(“实现线程:“ + this); try sleep(1000); catch(InterruptedException ie) ie.printStackTrace(); ,public class CreateThreadDemo public static void main(String args) MyThread T = new MyThread(“study“); T.start(); ,线程

6、的状态,线程的状态:新生、就绪、运行、睡眠、挂起、阻塞、死亡七种状态,线程从新生到死亡的状态变化过程称为生命周期,线程状态的实现,新建建立了一个线程对象线程处于新建状态 就绪在创建线程后,它将处于就绪状态 运行线程在开始执行时进入运行状态 睡眠线程的执行可通过使用sleep()方法来暂时中止 等待如果调用了wait()方法,线程将处于等待状态 挂起suspend()方法使用线程处于挂起状态 恢复resume()方法可以使用挂起的线程 阻塞在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态 死亡在run()方法已完成执行或其stop()方法被调用之后,线程就处于死亡状态,线程状态的实

7、现,class MyThread extends Thread public MyThread(String name) super(name); System.out.println(“线程就绪“); public void start() System.out.println(“线程启动“); run(); public void run() System.out.println(“线程运行“); try System.out.println(“线程将要休眠10秒“); sleep(1000); System.out.println(“线程休眠10秒继续运行“); catch(Interr

8、uptedException ie) ie.printStackTrace(); ,public class CreateThreadDemo public static void main(String args) MyThread T = new MyThread(“study“); T.start(); System.out.println(“线程死亡“); ,暂停线程的方法,线程让出CPU时间片的方法: 无法获得CUP时间:线程优先级比较低 线程休眠:使用sleep()方法 线程显式出让CUP控制权:调用yield()方法 线程等待:调用wait()方法 阻塞:线程由于等待一个文件I/

9、O事件,线程优先级,class ChildThread extends Thread public void run() while(true) System.out.println(this + “子线程在运行“); yield(); ,public class ThreadPriorityDemo public static void main(String args) Thread MainT = Thread.currentThread(); ChildThread ChildT = new ChildThread(); ChildT.setPriority(Thread.MAX_PR

10、IORITY); ChildT.start(); for(int i = 0; i1000; i+) System.out.println(MainT + “主线程在运行“); ,Java中线程的实现方法,继承Thread类 创建一个新类来继承Thread类,然后重载run()方法,这个run方法是新线程的入口。 实现Runnable接口 通过实现Runnable接口的方法创建一个对象的线程。为了实现Runnable接口,类必须定义一个名为 run 的无参数的方法 。,实现Runnable接口,class MyFriend public void sayHello() System.out.p

11、rintln(“朋友!好久不见!“); class Welcome extends MyFriend implements Runnable public void run() while(true) sayHello(); try Thread.sleep(3000); catch(InterruptedException ie) ie.printStackTrace(); ,使用Runnable实现线程的特点,实现Runnable接口方法把虚拟CPU同程序代码、数据有效分离,较好的体现了面向对象的设计思想。 实现Runnable接口方法避免由于Java的单继承特性来来的局限。 实现Runn

12、able接口方法中代码能够被多个线程共享,代码与数据是独立的,有利于程序的健壮性。,class ThreadSale implements Runnable private int tickets=100; public void run() while(true) if(tickets 0) try Thread.sleep(5); catch(InterruptedException ie) ie.printStackTrace(); System.out.println(Thread.currentThread().getName() + “ 销售票号为: “ + tickets- -)

13、; ,public class TicketsSale public static void main(String args) ThreadSale T = new ThreadSale(); Thread T1 = new Thread(T); Thread T2 = new Thread(T); Thread T3 = new Thread(T); Thread T4 = new Thread(T); T1.start(); T2.start(); T3.start(); T4.start(); ,使用Runnable接口实现多窗口售票,线程同步,程序中不能有多个线程同时在两句代码之间执

14、行,这就是线程同步。 为了确保在任何时间点一个共享的资源只能被一个线程使用,就需要使用“同步”。 实现同步的方法有两种: 同步代码块 同步方法,同步代码块,同步代码块模式如下所示,其中Object可以是任意的一个对象。 synchronized(object) /要同步的语句 ,使用此方法解决售票系统的问题,class ThreadSale implements Runnable private int tickets = 100; Object obj = new Object();/同步块对象,任意对象均可 public void run() synchronized(obj) if(ti

15、ckets = 0) break; System.out.println(Thread.currentThread().getName() + “ 销售票号为: “ + tickets- -); ,同步方法,同步方法模式如下所示,其中method为要实现同步的方法。 synchronized void method() /要同步的语句 ,使用同步方法解决售票系统问题,class ThreadSale implements Runnable private int tickets = 100; public void run() sell(); synchronized public void sell() if(tickets 0) System.out.println(Thread.currentThread().getName() + “ 销售票号为: “ + tickets- -); ,死锁,当两个线程循环依赖于一对同步对象时将发生死锁 死锁是很难调试的错误,死锁的解决方法,wait-notify机制是解决由于使用synchronized方法或块产生的死

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号