已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章多线程,本次课程内容,认识多线程线程概念创建多线程线程的“一生”线程的优先级线程的同步,1.认识多线程,当我们使用电脑时,可以一边听音乐、一边QQ聊天、一边打游戏。一个CPU怎么可以同时作这么多事情呢?,难道电脑真的可以同时运行多个程序?,真的吗?,在同一时间点执行各项进程,编译程序发送/接收邮件打印文件其他,操作系统允许计算机同时执行多项操作,程序(进程),publicclassmainClasspublicstaticvoidmain(Stringagrs)m1();publicstaticvoidm1()m2();m3();publicstaticvoidm2()publicstaticvoidm3(),单线程,双线程,2.线程概念,程序、进程与多任务程序(program)是对数据描述与操作的代码的集合,是应用程序执行的脚本。进程(process)是程序的一次执行过程,是系统运行程序的基本单位。程序是静态的,进程是动态的。系统运行一个程序即是一个进程从创建、运行到消亡的过程。多任务(multitask)在一个系统中可以同时运行多个程序,即有多个独立运行的任务,每个任务对应一个进程。,线程线程(thread)就是比进程更小的运行单位,是程序中单个顺序的流控制。一个进程中可以包含多个线程。简单来讲,线程是一个独立的执行流,是进程内部的一个独立执行单元,相当于一个子程序。,3.创建多线程,JDK提供的相关类和接口(1)Runnable接口就提供一个方法run()(2)Thread类实现了Runnable接口创建线程的两种方法:创建Thread类的子类,重写该类的run方法创建Runnable接口的实现类,实现接口中的run方法,方法一:创建Thread的子类,创建Thread的子类创建线程对象启动线程start()方法可以启动线程,开始执行run()中代码。即:run()内代码,不是调用执行,而是启动后,由虚拟机自动执行的。,classMyThreadextendsThreadpublicvoidrun()for(inti=1;i=30;i+)System.out.println(“线程”+getName()+“正在打印+i);publicstaticvoidmain(Stringargs)System.out.println(“main开始执行”);MyThreadmt=newMyThread();/MyThreadmt2=newMyThread();mt.start();/mt2.start();for(inti=1;i=30;i+)System.out.println(“线程main正在打印+i);,线程练习一:管道流(PipedOuputStream,PipeInputStream),方法一:PipedInputStreamin=newPipedInputStream();PipedOutputStreamout=newPipedOutputStream(in);方法二:PipedInputStreamin=newPipedInputStream();PipedOutputStreamout=newPipedOutputStream();In.connect(out);out.connect(in),?问题:要定义的线程类已经显式继承了一个其他的类怎么办?,方法二:创建Runnable接口的实现类,创建类实现接口classclassnameimplementsRunnablevoidrun()创建该类对象(不是线程对象,还要借助Thread类)Thread(该类对象)启动线程start(),classMyRunnableimplementsRunnablepublicvoidrun()for(inti=1;i=30;i+)System.out.println(“线程”+Thread.currentThread().getName()+“正在打印+i);publicstaticvoidmain(Stringargs)System.out.println(“main开始执行”);MyRunnablemr=newMyRunnable();Threadt=newThread(mr);t.start();for(inti=1;i=30;i+)System.out.println(“线程main正在打印+i);,run不可以调用!start启动线程!JVM自动执行run!,classMyRunnableimplementsRunnablepublicvoidrun()for(inti=1;i=30;i+)System.out.println(“线程”+Thread.currentThread().getName()+“正在打印+i);publicstaticvoidmain(Stringargs)System.out.println(“main开始执行”);MyRunnablemr=newMyRunnable();Threadt=newThread(mr);t.run();for(inti=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.线程的优先级,classMyThreadextendsThreadpublicvoidrun()for(inti=1;i=30;i+)System.out.println(“线程”+Thread.currentThread().getName()+“正在打印+i);classThreadTestpublicstaticvoidmain(Stringargs)System.out.println(Thread.currentThread().getPriority();MyThreadmt1=newMyThread();MyThreadmt2=newMyThread();MyThreadmt3=newMyThread();mt1.setPriority(MIN_PRIORITY);mt3.setPriority(MAX_PRIORITY);mt1.start();mt2.start();mt3.start();,线程间“共享”数据产生的问题实例:银行的一个账户:Bankbank=newBank(“0001”,2000);两张卡(线程):Operation(“1#”,bank,1200).start();Operation(“2#”,bank,1200).start();,6.线程的同步,“0001”2000,产生这种问题的原因是对共享资源访问的不完整。为了解决这种问题,需要寻找一种机制来保证对共享数据操作的完整性,这种完整性称为共享数据操作的同步。在Java语言中,引入了“对象互斥锁”的概念。“对象互斥锁”阻止多个线程同时访问同一个变量。在Java语言中,“对象互斥锁”的实现:用关键字synchronized来声明一个操作共享数据的方法或一段代码。,Java对象锁,用synchronized来标识的代码段或方法即为“对象互斥锁”锁住的部分。如果一个程序内有两个或以上的方法使用synchronized标志,则它们在同一个“对象互斥锁”管理之下。,使用“synchronized”关键字-1修饰方法被“synchronized”关键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省内江市2026年高考生物押题试卷含解析
- 桥梁工程混凝土施工管控方案
- 红树林植被养护管理实施方案
- 2025-2026学年湖南省湘西土家族苗族自治州高考生物必刷试卷含解析
- 消防电源监控系统设计、安装和验收方案
- 基层义诊活动组织实施手册
- 烤漆房工程施工规范
- 市政道路开挖回填交通疏导方案
- 2026中国造纸行业市场发展现状产业链竞争格局投资潜力规划分析
- 2026中国物流5G技术应用前景及网络覆盖与运营成本分析报告
- DBJT 13-502-2025 古建筑安全监测技术标准
- 声调课件-高中日语新版标准日本语初级上册
- 沟(河)道清淤清障单元工程施工质量检验表
- 运输货车承包合同7篇
- 风电塔筒生产线项目初步设计
- 统编人教版(2024)八年级上册道德与法治全册教案
- 配网工程激励方案(3篇)
- 烙铁焊接贴片知识培训课件
- 研学基地活动策划与执行流程
- 基层心血管病综合管理实践指南
- 2025年4月自考00840第二外语(日语)试题
评论
0/150
提交评论