




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,Java面向对象的编程,第9章多线程,2,本章的主要内容,多线程的概念线程生成继承java.lang.Thread类实现将java.lang.Runnable接口设置线程设置为后台线程,线程的优先级线程同步:出票问题程序块同步方法线程之间的通信同步:生产者和消费者问题多个进程:允许操作系统同时运行多个作业(程序)。多线程:在同一应用程序(进程)中同时运行多个顺序流。线程和进程之间的区别:每个进程都有其自己的完整变量集,线程共享相同的数据。运行的Java程序是包含一个或多个线程(也称为主线程)的进程。4,Java使用多线程,通常有两种方法设置线程:继承java.lang.Thread类以实现java.lang.Runnable接口,并实现Runnable接口publicinterfaceerunble public void run();/线程体,Thread类publicclassthreamplementsrunnable public void run().;/线程体public void start () .;/线程开始,5,继承Thread类实现多线程,Thread类的配置方法:Thread()Thread(run nable target)Thread(string name)的典型实例通常调用指定类的main方法。Java虚拟机会继续执行线程,直到调用Runtime类的exit方法,并且安全管理员允许终止操作。非守护程序线程中的所有线程都已停止工作。线程挂起:yield()显示线程挂起和后台线程,7,继承Thread类实现多线程,线程的优先级每个线程都保留了指示程序中该线程重要性的优先级属性,Java虚拟机选择优先级最高的线程进入运行状态。表示某些优先级的常量由Thread类提供,Thread .MIN_PRIORITY表示最低优先级,Thread .MAX_PRIORITY表示最高优先级,Thread .NORM_PRIORITY表示正常优先级,默认情况下,线程的优先级为正常优先级。除了这三个优先级外,Java共支持10个优先级。通过Thread.setPriority()和Thread.getPriority()修改和读取线程的优先级。线程优先级设置演示,8,Runnable接口实现多线程,实现Runnable接口实现线程(1)编写Runnable接口实现声明类:publicclassimpletelementsrunnable (2)publicvoidrun().(3)使用Thread的其他构造函数配置线程对象,该构造函数不会运行线程。SimpleThreadst=newSimpleThread();threadt=newThread(ST);/st表示线程对象(4)调用线程对象的start()方法来启动线程。t . start();演示Runnable接口实现实现多线程、9、多线程。主要是Java单个继承机制,当线程类继承Thread类时,无法继承其他类,因此必须实现Runnable接口以实现多线程。实现Runnable接口的线程可以共享相同的资源,例如,多个线程启动演示共享相同的资源,10,多线程实例3354售票系统,public void run()throw sinterrup texception while(true) thread . sleep(1000);/使用线程休眠来模拟票证出售时间(system . out . print ln(thread . current thread()。get name()( tickets-);,出现问题:销售最后一张票时,由于多个线程可能由于时间旋转而在输出语句中运行,因此会发生销售0,-1,-2票的情况。、演示多线程售票系统问题、11、线程的同步、使用锁定机制解决资源共享问题,即,对共享资源的读写一次只能访问一个线程、拥有密钥的线程。当线程不再访问共享资源时,尝试通过移交密钥访问该资源的其他线程将竞争访问。控制共享资源的这种方法称为同步。提供了关键字synchronized以解决Java语言同步问题。可以两种方式使用此关键字:程序块同步和方法同步。线程同步、12、线程间通信、线程间通信机制以及Java线程间通信通过wait()、notify()和notifyAll()进行。13,生产者和消费者问题,示例9.6生产中消费者问题具体介绍线程间通信。系统由生产者线程、消费者线程和一个共享缓冲区组成。其中:1。生产者继续写入,直到共享缓冲区满;如果共享缓冲区中有空间,生产者继续写入;2.消费者继续读取,直到共享缓冲区清空,如果共享缓冲区有内容,消费者继续读取;3.共享缓冲区内部空间为N(本例中为N=1),在任何时间点都可以有一个线程到缓冲区操作。演示线程间通信,14,线程的结束,编写线程体run()方法时,通常建议使用无限循环,并通过循环内的boolean标记控制循环停止。外部中断线程线程由于使用sleep()方法或某些方法(如wait()方法调用)而处于阻塞状态时,无法自行中断,在这种情况下,Thread类可以使用interrupt()方法中断线程,但程序会抛出InterruptedException异常。15,使用Executors创建线程池,Java从版本1.5开始提供Executor。Executor是实现此接口子类的接口,它是用于运行具有Runnable接口的已提交作业对象的辅助类。此界面提供了一种将作业提交与每个作业将如何运行的机制(包括线程的详细信息、调度等)分开的方法。介面ExecutorService继承Executor,是更广泛使用的介面。导入一个executors服务类型的实例需要Executors工厂类。16,使用Executors创建线程池,示例9.7)修改示例9.6生成器使用者问题,使用Executors创建线程池和启动多个线程。要实现此示例,首先需要实现Runnable接口的线程主体。在示例9.6中,Producer和Consumer可以修改Main,使用Executors启动多个线程。import Java . util . concurrent . executor service;import Java . util . concurrent . executors;public class main public stic void main(stringargs)/创建线程池executorserviceexec=executors . newcaced threadeadsqueueq=new queue();exec . execute(new producer(q);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2017正规租房合同范本
- 植物学奥赛题目及答案
- 人员培训与开发试题及答案(一)
- 人教版高一上学期语文期末考试试卷(含答案)
- 直营店招聘合同范本
- 法律咨询服务合同
- 俄语试卷题目及答案
- 健康保障考试试题题库及答案
- 2025年实验幼儿园教职工考核量化细则
- CN222960731U 环形跟踪上料站 (温州优匠工品科技有限公司)
- 3.2 参与民主生活 课件-2024-2025学年统编版道德与法治九年级上册
- 参观河南省博物院
- 医学检验技术专业《临床实验室管理》课程标准
- 扬尘治理方案及措施(2篇)
- 城市道路照明设计标准 CJJ 45-2015
- 安全隐患排查记录表样本
- T-JSIA 0002-2022 能源大数据数据目录指南
- 企业财务风险分析及防范-以永辉超市股份有限公司为例
- 药食同源课件
- 《数学与科技》课件
- 初中历史校本课程教案
评论
0/150
提交评论