已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年软件面试题测试题及答案
- 202云南玉溪市华宁县国有资本运营集团有限责任公司招聘15人笔试历年参考题库附带答案详解
- 2025贵州遵义市鑫财投资有限公司招聘工作人员及事宜笔试历年参考题库附带答案详解
- 2025湖北荆州市融资担保集团有限公司招聘笔试及笔试历年参考题库附带答案详解
- 工艺改进工程师工艺改进工程师团队管理技巧
- 压力管道检验员职业技能竞赛方案
- 2025山东滨州无棣县棣信产业投资集团有限公司及权属公司招聘工作人员4人笔试历年参考题库附带答案详解
- 2025四川绵阳市长虹杰创锂电科技有限公司招聘采购主办岗位测试笔试历年参考题库附带答案详解
- 2025四川九州电子科技股份有限公司招聘客户经理(校招)拟录用人员笔试历年参考题库附带答案详解
- 2025云南西双版纳景洪市城市投资开发有限公司第二次社会招聘9人笔试历年参考题库附带答案详解
- 2025年中国保险行业绿色保险业务研究报告
- 2025贵州黔西南州水资源开发投资(集团)有限公司招聘3人备考题库附答案详解(考试直接用)
- 危重患者留置管路的护理
- 2025下半年四川甘孜州考试招聘事业单位人员138人参考题库附答案
- 负压吸引器操作课件
- 2025年计算机基础(专升本)考试真题及答案
- 2025年及未来5年中国MPV汽车行业市场调研及未来发展趋势预测报告
- 服装专卖店导购员销售效果考核表
- 2025-2026学年河南省南阳市六校高一上学期10月月考物理试题含答案
- 崇明区育儿嫂合同
- 人员拥挤应急疏散
评论
0/150
提交评论