JAVA学习课件7.ppt_第1页
JAVA学习课件7.ppt_第2页
JAVA学习课件7.ppt_第3页
JAVA学习课件7.ppt_第4页
JAVA学习课件7.ppt_第5页
免费预览已结束,剩余30页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java 与 多线程,applet,Applet执行入口点 由于Browser有不同的消息要通知Applet,所以需要多入口。 public class AppletClass extends Applet public void init() start(). stop() destroy() paint(g) update(g) ,Applet的生命周期,生命周期称为Applet的主线程 一般由Browser或appletviewer自动调用,Applet的下载执行过程,WWW服务器 存放HTML,WWW服务器 存放.class,WWW浏览器 (Browser),解释执行字节码,HTML文

2、件, String getParameter(String name),Applet方法,Applet的有关方法 getParameter(String):返回HTML中设定的值 getCodeBase():返回.class所在网址URL getDocumentBase():返回HTML的URL getAppInfo():返回作者、版本、版权信息 showStatus(String):在浏览器的状态栏输出信息 Image getImage(URLurl, Stringname) play(URLurl, Stringname),程序 - 进程 - 线程,程序是为完成特定任务、用某种语言编写的一

3、组指令的集合。指一段静态的代码。 进程是程序的一次执行过程,是系统进行调度和资源分配的一个独立单位。,执行,就绪,等待,PCB,CPU,挂起,程序-进程-线程,线程是比进程更小的执行单位。 一个进程在其执行过程中,可以产生多个线程,形成多条执行线索。 每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。 一个线程有它自己的入口和出口,以及一个顺序执行的序列 线程不能独立存在,必须存在于进程中。 线程 轻量级的进程 系统负担小,主要是CPU的分配。,多线程,多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况。 多线程 实现 单个进程中的并发计算。 各线程间共享进程空间的

4、数据,并利用这些共享单元来实现数据交换、实时通信与必要的同步操作。 多线程的程序能更好地表述和解决现实世界的具体问题,是计算机应用开发和程序设计的一个必然发展趋势。,进程与多线程,传统进程,多线程进程,java与多线程,Java语言的一个重要功能特点就是内置对多线程的支持,它使得编程人员可以很方便地开发出具有多线程功能,能同时处理多个任务的功能强大的应用程序。 Java的所有类都是在多线程的思想下定义的,Java利用线程使整个系统成为异步。 每个Java程序都有一个隐含的主线程: application main 方法 Applet小程序,主线程指挥浏览器加载并执行java小程序。,线程的概念

5、模型,线程控制 (虚拟CPU),线程代码,线程的三个组成部分,被操作数据,Thread类,Thread类综合了Java程序中一个线程需要拥有的属性和方法 当生成一个Thread类的对象后,一个新的线程诞生了。 每个线程都是通过目标对象的方法run()来完成其操作的。方法run() 称为线程体(线程方法)。 提供线程体的目标对象是在初始化一个线程时指明的。 任何实现了Runnable接口(实现run()方法)的类实例都可以作为线程的目标对象。,建立线程例,public class ThreadTest public static void main(String args) Job1 j = n

6、ew Job1(); Thread t1 = new Thread(j) ; t1.start() ; class Job1 implements Runnable int I ; public void run() while (i50) System.out.println(i+) ; ,建立线程,线程控制 (虚拟CPU),线程代码,被操作数据,Thread的实例(t1),由实现了Runnable接口 的类(Job1)提供run方法,实现Runnable接口的类 (Job1)的实例 ( j ),生成与运行线程 方法1,class MyRun implements Runnable publ

7、ic void run() 线程体 MyRun mr = new MyRun(); Thread t1 = new Thread(mr) ; t1.start(); /Thread实例用于线程控制 适合于:定义run()方法的类必须是其他类的子类。 该类既可以继承上级类的属性和方法,其run()方法又可以用线程的方式执行。,Thread类构造函数,Thread(Runnable target) 参数指定目标对象 Thread(Runnabletarget, Stringname ) Thread类本身就实现了Runnable接口。 Thread() 实例本身提供线程体 Thread(Strin

8、g name) 指定线程名,MyThread mt = new MyThread(); mt.start();,class MyThread extends Thread public void run() 线程体 ,生成与运行线程 方法2,执行run()方法,建立线程,线程控制 (虚拟CPU),线程代码,被操作数据,实现Runnable接口的类 (Thread类的子类)的实例 ( mt),由实现了Runnable接口的类(Thread类的子类)提供 的run方法,Thread子类实例(mt),Thread类属性与方法,属性 MIN_PRIORITY 1 NORM_PRIORITY 5 MAX

9、_PRIORITY 10 线程控制-对象方法 setPriority(intnewPriority) 改变线程的优先级 void start() 启动线程 String getName() 返回线程名 Boolean isAlive() 判断该线程是否在生命周期,Thread类静态方法,staticvoid sleep(毫秒): 令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队 产生例外InterruptedException staticvoid yield() 使当前执行线程重新排队,让出CPU给其他相同优先级的线程。 staticThread curr

10、entThread() 返回当前线程,1-application,2-applet,线程状态,新建状态,new Thread(.),就绪状态,start(),等待状态,执行状态,I/O sleep(),CPU调度,run() 结束 stop(),yield(),消亡,I/O完成 sleep时间到,多个线程操作同一数据资源,会造成操作的不完整性,会破坏数据。 临界资源 临界区 解决办法 加锁,线程的同步与互斥,10,10,8,8,10,7,7,线程的同步与互斥,对象互斥锁 在Java中,每个对象有一个“互斥锁”,该锁可用来保证在同一时刻只能有一个线程访问该对象。 锁的使用过程(当一个线程要操作一

11、个对象时),准备 加锁,对象是否 已加锁,加锁,进入 临界区 执行操作,解锁,否,是,线程的同步与互斥,加锁1 (临界区-方法) synchronized 方法名 进入该方法时加锁 加锁2(临界区-代码块) 方法名 . synchronized(this) /进入该代码段时加锁 . 一个线程为某对象加锁后,便对该对象具有了监控权。,3,线程的同步与互斥,进队,出队,生产者,消费者,线程的同步与互斥,主线程,线程1( ),线程2( ),操作对象,共享数据(队),synchronized 同步方法1(生产) wait() notify(),synchronized 同步方法2(消费) wait()

12、 notify(),线程的同步与互斥,public final void wait() 方法 在当前线程中调用方法: 对象名.wait() 使当前线程进入等待(某对象)状态 ,直到另一线程对该对象发出notify(或notifyAll)为止。 调用方法的必要条件:当前线程必须具有对该对象的监控权(加锁) 当前线程将释放对象监控权 ,然后进入等待队列(wait队列)。 在当前线程被notify后,换要重新获得监控权,然后从断点处继续代码的执行。,线程的同步与互斥,public final void notify() 方法 在当前线程中调用方法: 对象名.notify() 功能:唤醒等待该对象监控

13、权的一个线程。 调用方法的必要条件:当前线程必须具有对该对象的监控权(加锁) notifyAll() 唤醒wait队列中的所有线程,并把它门移入锁申请队列。,4,线程状态,新建状态,就绪状态,start(),等待状态,执行状态,CPU调度,run() 结束,消亡,等待状态 对象wait()池,等待状态 对象lock池,wait(),notify(),synchronized(),解锁,sleep() join(),yield(),线程调度,public static void sleep(longmillis) 当前进程休眠指定时间 public static void yield() 主动让

14、出CPU,重新排队 public final void join() :等待某线程结束,5,等待另一线程结束,Runnable ot = new otheeThread() ; Thread tt = new Thread(ot) ; tt.start(); /执行自己的工作 try tt.join () ; catch( interruptedException e) . /继续做自己的事,让给另一线程,正在执行的线程将CPU让给其他具有相同优先级的线程,自己进入就绪状态重新排队。 yield,终止线程,public class R implement Runnable private bo

15、olean timeToQuit=false ; /设标记 public void run() while (! timeToQuit ) public void stopRunning() timeToQuit=true; public class test public static void main(String args ) Runnable r = new R(); Thread t = new Thread(r) ; t.start() ; if () r.stopRunning() ; ,建立线程的两种方式,从严格的面向对象的设计观点,Thread类本意是封装虚拟的CPU。当虚拟CPU的功能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论