欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    Java程序设计实例教程-第8章.ppt

    • 资源ID:6509990       资源大小:614KB        全文页数:29页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java程序设计实例教程-第8章.ppt

    第8章 多线程,本次课程内容,认识多线程线程概念创建多线程线程的“一生”线程的优先级 线程的同步,1.认识多线程,当我们使用电脑时,可以一边听音乐、一边QQ聊天、一边打游戏。一个CPU怎么可以同时作这么多事情呢?,难道电脑真的可以同时运行多个程序?,真的吗?,在同一时间点执行各项进程,编译程序 发送/接收邮件 打印文件 其他,操作系统允许计算机同时执行多项操作,程序(进程),public class mainClass public static void main(String agrs)m1();public static void m1()m2();m3();public static void m2()public static void m3(),单线程,双线程,2.线程概念,程序、进程与多任务程序(program)是对数据描述与操作的代码的集合,是应用程序执行的脚本。进程(process)是程序的一次执行过程,是系统运行程序的基本单位。程序是静态的,进程是动态的。系统运行一个程序即是一个进程从创建、运行到消亡的过程。多任务(multi task)在一个系统中可以同时运行多个程序,即有多个独立运行的任务,每个任务对应一个进程。,线程线程(thread)就是比进程更小的运行单位,是程序中单个顺序的流控制。一个进程中可以包含多个线程。简单来讲,线程是一个独立的执行流,是进程内部的一个独立执行单元,相当于一个子程序。,3.创建多线程,JDK提供的相关类和接口(1)Runnable 接口 就提供一个方法run()(2)Thread类 实现了Runnable接口创建线程的两种方法:创建Thread类的子类,重写该类的run方法创建Runnable接口的实现类,实现接口中的run方法,方法一:创建Thread的子类,创建Thread的子类创建线程对象启动线程start()方法可以启动线程,开始执行run()中代码。即:run()内代码,不是调用执行,而是启动后,由虚拟机自动执行的。,class MyThread extends Thread public void run()for(int i=1;i=30;i+)System.out.println(“线程”+getName()+“正在打印+i);public static void main(String args)System.out.println(“main开始执行”);MyThread mt=new MyThread();/MyThread mt2=new MyThread();mt.start();/mt2.start();for(int i=1;i=30;i+)System.out.println(“线程main正在打印+i);,线程练习一:管道流(PipedOuputStream,PipeInputStream),方法一:PipedInputStream in=new PipedInputStream();PipedOutputStream out=new PipedOutputStream(in);方法二:PipedInputStream in=new PipedInputStream();PipedOutputStream out=new PipedOutputStream();In.connect(out);out.connect(in),?问题:要定义的线程类已经显式继承了一个其他的类怎么办?,方法二:创建Runnable接口的实现类,创建类实现接口class classname implements Runnable void run()创建该类对象(不是线程对象,还要借助Thread类)Thread(该类对象)启动线程start(),class MyRunnable implements Runnable public void run()for(int i=1;i=30;i+)System.out.println(“线程”+Thread.currentThread().getName()+“正在打印+i);public static void main(String args)System.out.println(“main开始执行”);MyRunnable mr=new MyRunnable();Thread t=new Thread(mr);t.start();for(int i=1;i=30;i+)System.out.println(“线程main正在打印+i);,run不可以调用!start启动线程!JVM自动执行run!,class MyRunnable implements Runnable public void run()for(int i=1;i=30;i+)System.out.println(“线程”+Thread.currentThread().getName()+“正在打印+i);public static void main(String args)System.out.println(“main开始执行”);MyRunnable mr=new MyRunnable();Thread t=new Thread(mr);t.run();for(int i=1;i=30;i+)System.out.println(“线程main正在打印+i);,4.线程的“一生”,线程的“一生”有几个阶段:(1)创建 线程对象生成(2)就绪 start()启动,等待运行(3)运行 CPU运行run()代码(4)阻塞 运行过程中因为某种原因,让出CPU(5)死亡 运行完毕,线程结束;或抛出异常退出,造成“阻塞”的原因:(1)yield()主动出让CPU(2)sleep()累了,休息一下(3)join()合并线程,暂停(4)I/O操作 进行数据输出,暂停代码运行结束阻塞(1)休眠结束(2)join()执行完(3)输入/出操作执行完(4)调用Interrupt()打断休眠,Thread类提供了获取和设置线程优先级的方法getPriority:获取当前线程的优先级setPriority:设置当前线程的优先级Java语言为线程类设置了10个优先级,分别使用110内的整数表示,整数值越大代表优先级越高。每个线程都有一个默认的优先级,主线程的默认优先级是5。Thread类定义的三个常量分别代表了几个常用的优先级:MAX_PRIORITY::代表了最高优先级10MIN_PRIORITY::代表了最低优先级1NORM_PRIORITY::代表了正常优先级5,5.线程的优先级,class MyThread extends Thread public void run()for(int i=1;i=30;i+)System.out.println(“线程”+Thread.currentThread().getName()+“正在打印+i);class ThreadTest public static void main(String args)System.out.println(Thread.currentThread().getPriority();MyThread mt1=new MyThread();MyThread mt2=new MyThread();MyThread mt3=new MyThread();mt1.setPriority(MIN_PRIORITY);mt3.setPriority(MAX_PRIORITY);mt1.start();mt2.start();mt3.start();,线程间“共享”数据产生的问题实例:银行的一个账户:Bank bank=new Bank(“0001”,2000);两张卡(线程):Operation(“1#”,bank,1200).start();Operation(“2#”,bank,1200).start();,6.线程的同步,“0001”2000,产生这种问题的原因是对共享资源访问的不完整。为了解决这种问题,需要寻找一种机制来保证对共享数据操作的完整性,这种完整性称为共享数据操作的同步。在Java语言中,引入了“对象互斥锁”的概念。“对象互斥锁”阻止多个线程同时访问同一个变量。在Java语言中,“对象互斥锁”的实现:用关键字synchronized来声明一个操作共享数据的方法或一段代码。,Java对象锁,用synchronized来标识的代码段或方法即为“对象互斥锁”锁住的部分。如果一个程序内有两个或以上的方法使用synchronized标志,则它们在同一个“对象互斥锁”管理之下。,使用“synchronized”关键字-1修饰方法被“synchronized”关键字修饰的方法称为“同步方法”当一个线程访问对象的同步方法时,被访问对象就处于“锁定”状态,访问该方法的其他线程只能等待,对象中的其他同步方法也不能访问,但非同步方法则可以访问,使用“synchronized”关键字-2修饰部分代码如果只希望同步部分代码行,可以使用“同步块”同步块的作用与同步方法一样,只是控制范围有所区别,在多线程应用程序中,obj代表被锁定的共享对象,

    注意事项

    本文(Java程序设计实例教程-第8章.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开