java中的同步和异步的异同_第1页
java中的同步和异步的异同_第2页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

个人收集整理-ZQjava中的同步和异步的异同中的同步和异步的异同如果数据将在线程间共享.例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取.当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率.b5E2R。b5E2R。同步:基本概念:每个都会有个锁.同步就是串行使用一些资源. (说明:以下有些例子为了突出重点,省略了不必要的代码.非凡是省掉了一些成员变量,就是需要同步的对象.)p1Ean。p1Ean。 . 多线程中对共享、可变的数据进行同步.对于函数中的局部变量没必要进行同步.对于不可变数据,也没必要进行同步.多线程中访问共享可变数据才有必要. . 单个线程中可以使用,而且可以嵌套,但无意义. ( ) (); () () (!); . 对象实例的锁 () () () 上面的()和()效果一致, 取得的锁都是某个实列()的锁.比如: ();线程调用()时, 线程无法进入(),直到()结束.作用: 多线程中访问的同一个实例的同步方法时会进行同步. . 的锁 (); () () () () () ( ) () () 上面()()()()效果一致 ()()()中取得的锁都是的锁. ()是自己产生一个对象,利用的锁做同步作用: 多线程中访问此类或此类任一个实例的同步方法时都会同步. 模式 属于此类. . ; () , 但函数中没用用到 () , 函数中对进行了读写. 多线程中使用的某个实列时, () ()是线程安全的,不需要同步 () ()这个静态方法中使用了函数外静态变量,所以需要同步. 异步:一. 它要能适应不同类型的请求:本节用 来说明要求有返回值的请求.用来说明不需要返回值的请求.二. 要能同时并发处理多个请求,并能按一定机制调度:本节将用一个队列来存放请求,所以只能按机制调度,你可以改用,就可以简单实现一个优先级(优先级高的,低的).DXDiT。DXDiT。三. 有能力将调用的边界从线程扩展到机器间()四. 分离过度耦合,如分离调用句柄(取货凭证)和真实数据的实现.分离调用和执行的过程,可以尽快地将调返回.RTCrp。RTCrp。现在看具体的实现: ( ); ( ); 这个接口有两个方法要实现,就是有返回值的调用和不需要返回值的调用 , 我们把这个接口用一个代理类来实现,目的是将方法调用转化为对象,这样就可以将多个请求(多个方法调)放到一个容器中缓存起来,然后统一处理,因为 不支持方法指针,所以把方法调用转换为对象,然后在这个对象上统一执行它们的方法,不仅可以做到异步处理,而且可以将代表方法调用的请求对象序列化后通过网络传递到另一个机器上执行().这也是回调机制最有力的实现.5PCzV。5PCzV。一个简单的例子.如果 : 做如果 : 做如果 : 做如果有个情况,你不至于用个吧?以后再增加呢?所以如果程序员,会这样实现: (和定义结构不同) ; (*) (); ;然后你可以声明这个结构数据: , 做一个循环: () (数据组 传入的值) (数据组.*)(); 简单说中将要被调用的涵数可以被保存起来,然后去访问,调用,而中,我们无法将一个方法保存,除了直

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论