版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主要内容
■6.1线程的概念与POSIX标准
•6.1.1线程的概念
•6.1.2线程的POSIX标准
■6.2多线程的Java实现
•6.2.1线程的创建方法
•6.2.2线程的状态
■6.3互斥线程间的同步机制
•6.3.1多线程带来的冲突问题
•6.3.2共享资源合理使用的实现
•6.3.3按同步协调程度划分的线程间的关系
2011-7-82
Java面向对象程序设计教程
6.1线程的概念与POSIX标准
线程的概念
-线程其实是控制线程(Threadof
control)的简写。
■控制线程就是程序运行时的路径,是在一
个程序中与其它控制线程无关的能够独立
运行的代码片段。
■与线程有关的几个名词:
•进程与线程
•并发性与并行性
•异步与同步
2011-7-84
Java面向对象程序设计教程
基于进程的多任务处理环境
——二局部内存;
<___________J
,----11局部内存[
<___________J
——「扁两蒋]
■进程是重量级的内核级实体,需要分配它们自己独立的地
址空间:包括有虚拟内存映射、文件描述符、用户ID等,
并且每个进程都有属于自己的这些集合。用户的程序要访
问进程结构中的数据、查询或改变状态,唯一方法是通过
系统调用。进程间通信和转换是昂贵和受限的。
2011-7-85
Java面向对象程序设计教程
基于线程的多任务处理环境
■线程是轻量级实体,由寄存器、堆栈和某些数据组成。进程
结构的其余部分由所有的线程所共享:如地址空间、文件描
述符等——它们共享相同的地址空间并且共同分享同一个进
程。线程间通信是便宜的,线程间的转换也是低成本的。
2011-7-86
Java面向对象程序设计教程
线程并发
■并发性(Concurrency)是两个或多个线程(或传统的进
程)可以同时在执行代码之中;可以是相同的代码,也可
以是不同的代码。这些线程可以一次执行,也可以多次执
行,即一个已开始执行但被中断,而另外一个已开始了。
-但在给定的时间点上,只有一个在CPU在处理一个线程。
2011-7-87
Java面向对象程序设计教程
线程并行
-并行性(Parallelism)是针对多处理器环境而言的,
是指两个或多个线程真正同时运行在不同的CPU上。
■在多处理器机上,很多不同的线程可以并行运行,或者
说是同时运行。
2011-7-88
Java面向对象程序设计教程
异步与同步
■异步世界需要处理同步业务
■有3个人在3个收银台前结帐
—•3个人结帐是异步的
•每个人信用卡在银行业务处理时需保证同步
2011-7-89
Java面向对象程序设计教程
线程的POSIX标准
2011-7-8
Java面向对象程序设计教程
6.2多线程的Java实现
主线程
■通过调用Thread类的currentThread方法
来查看主线程:
•Thread.currentThread()
■举例:MainThread.java
2011-7-812
Java面向对象程序设计教程
创建线程有两种方式
-通过直接扩展Thread类来直接创建线程:
•publicclassBidThreadextendsThread
•newBidThread(10,1000).start()
•举例:BidThread.java,Auction.java
■通过设计一个类,使之实现java.lang.Runnable接口,再把该接
口作为参数传递给Thread美的构造方族后间接创建线程:
•publicclassBidRunimplementsRunnable
•newThread(newBidRun(10zlOOO)).start()
•举例:BidRun.java,Auction.java
2011-7-813
Java面向对象程序设计教程
采用间接创建线程的原因
■第一个理由是我们并不改变线程本身的性
质,仅覆盖run方法,并没有增加新的功能,
因此将Thread扩展子类并不恰当,这不太
符合类扩展规范。
■第二个理由是:如果实现Runnable接口,
它可能使我们所设计的类扩展其它类型而
变得更为有用。
2011-7-8
Java面向对象程序设计教程
线程内容的定义
■覆盖或实现njn方法・..
■start方法一般只用来触发线程,把线程的
内容放在这个方法体中不太规范,而且这样
做实际上线程不会竞争运行。
•思考与练习11
■如果直接调用run方法,线程也不会竞争运
行,必须通过start方法间接调用run方法。
•思考与练习12
2011-7-815
Java面向对象程序设计教程
Thread类一些方法使用的例子
■线程优先级:PriorityTest.java
■创建守护线程:DaemonTest.java
■线程歹(J表:ThreadList.java
■线程组信息:ThreadGroupTest.java
2011-7-816
Java面向对象程序设计教程
线程的状态
2011-7-8
Java面向对象程序设计教程
与线程所处状态有关的方法举例
■join方法的例子:JoinTestJava
■yield方法的例子:YieldTest.java
■interrupt方法的例子:IntemjptTest.java
2011-7-818
Java面向对象程序设计教程
6.3互斥线程间的同步机制
多线程带来的冲突问题
-实例变量也是共享的
•举例:ThreadSharedData.java
■使用volatile关键字通知线程及时取得共享
变量的更新值
■共享资源使用冲突
2011-7-820
Java面向对象程序设计教程
银行业务中共享资源冲突示意
2011-7-8
Java面向对象程序设计教程
共享资源合理使用的实现
-使用同步方法
•调用被synchronized关键字修饰的方法
■使用同步代码块
•synchronized(obj){
•//statementstobesynchronized
•}
■举例:AccountSimulatorjava
2011-7-822
Java面向对象程序设计教程
讨论:同步代码块中对象锁的选择
-类本身:
synchronized(TransferManager.class)
■静态对象:
staticObjectobj=newObject();
synchronized(obj)
■实例对象:
synchronized(this)
■举例:见AccountsimulatorJava
2011-7-823
Java面向对象程序设计教程
思考
■在Accountsimulator,java例子中为什么
synchronized(this)无法上锁以保证同步?
TransferManagertml=newTransferManager(checking,savings);
TransferManagertm2=newTransferManager(savings,checking);
Threadtl=newThread在线程中使用不同的实例对象,若用
Threadt2=newThread
this,实际上两个线程分别使用一个对
tl.start();象锁。\
t2.start();
2011-7-8Java面向对象程序设计教程24
思考
如果要求使用synchronized(this)也能保证同
步,程序应如何改动?
2011-7-825
Java面向对象程序设计教程
讨论:同步导致的死锁问题
-死锁发生在当两个线程对两个同步对象有循环依
赖关系时。
■例如,假定一个线程进入了对象X的对象锁而另
一个线程进入了对象Y的对象锁。如果X的线程试
图调用Y的同步方法,它将像预料的一样被锁定。
而Y的线程同样希望调用X的一些同步方法,线程
永远等待,因为为到达X,必须释放自己的Y的锁
定以使第一个线程可以完成。
■举例:DeadLock.java
2011-7-826
Java面向对象程序设计教程
按同步协调程度划分的线程间的关系
-不相关的线程
■相关但不需要同步的线程
■互斥线程
-交互式互斥线程
2011-7-827
Java面向对象程序设计教程
不相关的线程:Drinkerjava
2011-7-828
Java面向对象程序设计教程
相关但无需同步线程:Kid.java
2011-7-829
Java面向对象程序设计教程
互斥线程:Customerjava
2011-7-830
Java面向对象程序设计教程
交互式的互斥线程:Consumer.java
这腕利|煲对于顾客和期帕而言是
・共享’的.而且何时F的以及
何时何以可都是相夫的对
、/干这杯费•只有客人点
了才会被做出来,也只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024物业租赁中的让与担保 甲方与乙方合同范本
- 2025年度体育赛事代理合同终止及赛事推广合作协议4篇
- 2025年度商铺物业管理与应急响应预案合同4篇
- 2025年度变压器租赁及电力设备租赁期满续租合同3篇
- 2024艺人广告代言服务合同范本
- 2025年度主题餐厅投资合作协议范本3篇
- 2025年度水果种植基地与电商平台合作合同3篇
- 2024跨境电子商务融资代建合同
- 2025年度安全生产信息化服务合同范本3篇
- 2025年度新能源汽车充电站车棚建设与运营承包合同4篇
- 2024高考复习必背英语词汇3500单词
- 消防控制室值班服务人员培训方案
- 《贵州旅游介绍》课件2
- 2024年中职单招(护理)专业综合知识考试题库(含答案)
- 无人机应用平台实施方案
- 挪用公款还款协议书范本
- 事业单位工作人员年度考核登记表(医生个人总结)
- 盾构隧道施工数字化与智能化系统集成
- 【企业盈利能力探析文献综述2400字】
- 2019年医养结合项目商业计划书
- 2023年店铺工程主管年终业务工作总结
评论
0/150
提交评论