传智播客java基础加强班PPT---Java基础班讲义线程课件

上传人:我*** 文档编号:142652857 上传时间:2020-08-22 格式:PPT 页数:29 大小:132.50KB
返回 下载 相关 举报
传智播客java基础加强班PPT---Java基础班讲义线程课件_第1页
第1页 / 共29页
传智播客java基础加强班PPT---Java基础班讲义线程课件_第2页
第2页 / 共29页
传智播客java基础加强班PPT---Java基础班讲义线程课件_第3页
第3页 / 共29页
传智播客java基础加强班PPT---Java基础班讲义线程课件_第4页
第4页 / 共29页
传智播客java基础加强班PPT---Java基础班讲义线程课件_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《传智播客java基础加强班PPT---Java基础班讲义线程课件》由会员分享,可在线阅读,更多相关《传智播客java基础加强班PPT---Java基础班讲义线程课件(29页珍藏版)》请在金锄头文库上搜索。

1、IT资讯交流网 WWW.IT315.ORG,Java 基础班讲义,目标,了解多线程的概念 掌握如何创建线程 掌握线程同步 了解死锁的概念 掌握使用 wait() 和 notify() 在线程之间进行通信,IT资讯交流网 WWW.IT315.ORG,多任务处理,进程是指一种“自包容”的运行程序,有自己的地址空间;线程是进程内部单一的一个顺序控制流 基于进程的特点是允许计算机同时运行两个或更多的程序。 基于线程的多任务处理环境中,线程是最小的处理单位。,多任务处理有两种类型: - 基于进程 - 基于线程,IT资讯交流网 WWW.IT315.ORG,基于线程的多任务处理的优点,基于线程所需的开销更少

2、 在多任务中,各个进程需要分配它们自己独立的地址空间 多个线程可共享相同的地址空间并且共同分享同一个进程 进程间调用涉及的开销比线程间通信多 线程间的切换成本比进程间切换成本低,IT资讯交流网 WWW.IT315.ORG,多线程,多线程 在Java中,一个应用程序可以包含多个线程。每个线程执行特定的任务,并可与其他线程并发执行 多线程使系统的空转时间最少,提高CPU利用率 多线程编程环境用方便的模型隐藏CPU在任务间切换的事实,IT资讯交流网 WWW.IT315.ORG,主线程,在Java程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。 主线程的重要性体现在两个方面: 它是产生其他子

3、线程的线程。 通常它必须最后完成执行,因为它执行各种关闭动作。,IT资讯交流网 WWW.IT315.ORG,主线程示例,class Mythread extends Thread public static void main(String args) Thread t= Thread.currentThread(); System.out.println(当前线程是: +t); t.setName(MyJavaThread); System.out.println(当前线程名是: +t); try for(int i=0;i3;i+) System.out.println(i); Threa

4、d.sleep(1500); catch(InterruptedException e) System.out.println(主线程被中断); ,获得当前线程,即主线程,改变线程的内部名称,输出每个数后暂停1500毫秒,IT资讯交流网 WWW.IT315.ORG,创建线程 2-1,通过以下两种方法创建 Thread 对象: - 声明一个 Thread 类的子类,并覆盖 run() 方法。 class mythread extends Thread public void run( ) /* 覆盖该方法*/ - 声明一个实现 Runnable 接口的类,并实现 run() 方法。 class

5、mythread implements Runnable public void run( ) /* 实现该方法*/ ,IT资讯交流网 WWW.IT315.ORG,创建线程 2-2,要触发一个新线程,使用 start() 方法,如: Mythread t = new Mythread(); t.start(); 在调用 start() 方法时,将创建一个新的控制线程,接着它将调用 run() 方法。 run() 方法中的代码定义执行线程所需的功能。,IT资讯交流网 WWW.IT315.ORG,创建线程示例,class MyThread1 extends Thread public static

6、 void main(String args) Thread t= Thread.currentThread(); System.out.println(主线程是: +t); MyThread1 ex = new MyThread1(); ex.start(); public void run() System.out.println(子线程是:+this); ,或者使用 implements Runnable,IT资讯交流网 WWW.IT315.ORG,线程的状态 4-1,新建 (Born) : 新建的线程处于新建状态 就绪 (Ready) : 在创建线程后,它将处于就绪状态,等待 star

7、t() 方法被调用 运行 (Running) : 线程在开始执行时进入运行状态 睡眠 (Sleeping) : 线程的执行可通过使用 sleep() 方法来暂时中止。在睡眠后,线程将进入就绪状态,IT资讯交流网 WWW.IT315.ORG,线程的状态4-2,等待 (Waiting) : 如果调用了 wait() 方法,线程将处于等待状态。用于在两个或多个线程并发运行时。 挂起 (Suspended) : 在临时停止或中断线程的执行时,线程就处于挂起状态。 恢复 (Resume) : 在挂起的线程被恢复执行时,可以说它已被恢复。,IT资讯交流网 WWW.IT315.ORG,阻塞 (Blocked

8、) 在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态。 死亡 (Dead) 在 run() 方法已完成执行或其 stop() 方法被调用之后,线程就处于死亡状态。,线程状态4-3,IT资讯交流网 WWW.IT315.ORG,IT资讯交流网 WWW.IT315.ORG,线程的状态 4-4,可能使线程暂停执行的条件,线程: 线程优先级比较低,因此它不能获得 CPU 时间。 使用 sleep( ) 方法使线程睡眠。 通过调用 wait( ) 方法,使线程等待。 通过调用 yield( ) 方法,线程已显式出让CPU控制权。 线程由于等待一个文件I/O事件被阻塞。,IT资讯交流网 WWW

9、.IT315.ORG,线程状态的示例,class ThreadStateDemo extends Thread Thread t; public ThreadStateDemo() t=new Thread(this); System.out.println (线程 t 为新建!); System.out.println (线程 t 为就绪!); t.start(); public void run() try System.out.println (线程 t 在运行!); t.sleep(500); System.out.println(线程 t 在短时间睡眠后重新运行!); catch (

10、InterruptedException IE) System.out.println(线程被中断); ,public static void main(String args) new ThreadStateDemo(); ,IT资讯交流网 WWW.IT315.ORG,Thread 类中的重要方法 2-1,IT资讯交流网 WWW.IT315.ORG,Thread 类中的重要方法 2-2,IT资讯交流网 WWW.IT315.ORG,线程优先级,Java 中的线程优先级是在 Thread 类中定义的常量 NORM_PRIORITY : 值为 5 MAX_PRIORITY : 值为 10 MIN_

11、PRIORITY : 值为 1 缺省优先级为 NORM_PRIORITY 有关优先级的方法有两个: final void setPriority(int newp) : 修改线程的当前优先级 final int getPriority() : 返回线程的优先级,IT资讯交流网 WWW.IT315.ORG,线程同步,有时两个或多个线程可能会试图同时访问一个资源 例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件中修改数据 在此情况下,数据可能会变得不一致 为了确保在任何时间点一个共享的资源只被一个线程使用,使用了“同步”,IT资讯交流网 WWW.IT315.ORG,如何在

12、Java 中获得同步,同步基于“监视器”这一概念。“监视器”是用作互斥锁的对象。在给定时刻,只有一个线程可以拥有监视器。 Java中所有的对象都拥有自己的监视器 两种方式实现同步: 使用同步方法 synchronized void methodA() 使用同步块 synchronized(object) /要同步的语句 ,IT资讯交流网 WWW.IT315.ORG,同步方法,class One synchronized void display(int num) System.out.print(+num); try Thread.sleep(1000); catch(InterruptedE

13、xception e) System.out.println(中断); System.out.println( 完成); ,进入某一对象的监视器,就是调用被synchronized关键字修饰的方法。,class Two implements Runnable int number; One one; Thread t; public Two(One one_num, int n) one=one_num; number=n; t=new Thread(this); t.start(); public void run() one.display(number); ,public class S

14、ynch public static void main(String args) One one=new One(); int digit=10; Two s1=new Two(one,digit+); Two s2=new Two(one,digit+); Two s3=new Two(one,digit+); s1.t.join(); s2.t.join(); s3.t.join(); ,IT资讯交流网 WWW.IT315.ORG,同步块,如果无法在相关方法前加synchronized 修饰符,只需将对这个类定义的方法的调用放入一个synchronized 块内就可以了。,class O

15、ne void display(int num) System.out.print(+num); try Thread.sleep(1000); catch(InterruptedException e) System.out.println(中断); System.out.println( 完成); ,class Two implements Runnable int number; One one; Thread t; public Two(One one_num,int n) one=one_num; number=n; t=new Thread(this); t.start(); pu

16、blic void run() synchronized(one) one.display(number); ,IT资讯交流网 WWW.IT315.ORG,死锁,当两个线程循环依赖于一对同步对象时将发生死锁。例如: 一个线程进入对象ObjA上的监视器,而另一个线程进入对象ObjB上的监视器。如果ObjA中的线程试图调用ObjB上的任何 synchronized 方法,就将发生死锁。 死锁很少发生,但一旦发生就很难调试。,IT资讯交流网 WWW.IT315.ORG,wait-notify 机制 2-1,为避免轮流检测,Java提供了一个精心设计的线程间通信机制,使用wait()、notify()和notifyAll()方法 。 这些方法是作为 Object 类中的 final 方法实现的。 这三个方法仅在 synchronized 方法中才能被调用。,IT

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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