java多线程选编.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
“ ” JAVA 多线程 多线程的必要性 一个CPU同一时间只能运行一个进程。进程相互独立,数据不共享。 单线程模式 效率低下,未充分合理的利用CPU 多线程模式 共享内存,可以实现多任务 共享数据\资源的带来的事务性问题(ACID) 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成。 一致性:任何一个读取总是能读取到之前完成的写操作。 隔离性:为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求 用于同一数据。 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被 回滚。 线程安全 如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 线程安全问题都是由全局变量及静态变量引起的。 多线程编程面临的挑战 Single thread execution pattern (syschronized)。 针对方法或程序块添加同步锁 Immutable (final类) 例如java中所有基础数据类,例如String,Integer。主要针对解决线程安全问题。 final + static + 不可变类 Balking pattern 放弃模式 判断资源状态,如果状态不满足,则放弃操作 Read-write lock pattern (读写锁) 多线程模式介绍 (与资源相关) future 异步执行任务,在任务执行结束后,能够取得任务处理结果 Thread-per-message pattern 发起异步任务,但不需要得到处理结果 多线程模式介绍 (与异步任务相关) Producer Consumer pattern(生产者消费者模式) 生产者,将产生的产品放到池中。消费者从池中取得产品进行消费 例如仓库存放及提取 Worker thread pattern (工作者模式) 等到工作来,来了就工作 将任务的产生和处理进行分离。例如IM中针对消息的处理机制。 多线程模式介绍 (与资源池相关) Guarded?Suspension?Pattern 条件警戒模式 多个线程共享一个实例 若多个线程都擅自更改实例的状态,实例会丧失安全性。 当实例的状态不恰当时,就要求线程等待到适合的状态。首先,以“警戒条件”来表示实例的“适当的状态”。并且在进行有安全性疑惑的操作前,都要检查是否警戒条件满足。如果警戒条件不成立,就要求线程等待到成立为止。 当警戒条件不成立时想要马上退出,就使用Balking?Pattern。 多线程模式介绍 (与条件警戒相关) Two-Phase?Termination 两阶段终止 从外部忽然结束掉线程,会丧失安全性。 定义一个送出“终止请求”的方法用来结束线程。这个方法事实上只会将标识设置成“收到终止请求”而已,线程要在每个可以开始终止处理的地方检查这个标识,如果检查结果为真,就开始进行终止处理。 Thread-Specific?Storage?Pattern?-线程保管箱模式 想要将假定在单线程环境下运行的对象(TSObject),在多线程的环境下使用。 建立线程独有的空间,并管理这些空间与线程的对照关系 建立一个与TSObject具有相同接口的TSObjectProxy参与者。并建立 TSObjectCollention,管理“Client--TSObject”的对照关系。 实现:Java语言中,使用java.lang.ThreadLocal类担任TSObjectCollention。 多线程模式介绍 (线程管理相关) static static 是存储在常量存储区中,一个jvm只有一份 final static 不可变对象 volatile volatile告知jvm,它所修饰的变量不保留拷贝,直接访问内存堆。 在java内存模型中,有main memory,每个线程也有自己的memeory,(例如寄存器)。出于性能考虑线程会在自己的memory中访问变量副本。 但不是简单使用volatile,则对这个变量的操作都是原子操作。当变量值由自己决定时,volatile失效。(n=n+m)。当此情况出现时,可用syschronized进行修饰。 原子操作:是指不会被线程调度机制打断的操作,这种操作一旦可是,就一致运行到结束,中间不会有任何contex switch(切换到另外一个线程) Java 多线程相关内容(单一JVM中) Synchronized 多线程同步依赖锁机制,通过对共享资源锁的获取和释放,协同各线程的工作。 对于java程序来说,每个对象实例都有一把“锁”。获取锁的方法就是syn

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档