ay13(多线程通信)总结 .docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ay13(多线程通信)总结 .doc

Dayl3总结 单列设计模式: 恶汉式: 代码体现: Class Single { Privtae static final Single s=new Single(); Private Single(){} Public static Single getlnstance() { Return s; } } 懒汉式:延迟加载,存在着多线程并发访问的安全问题,箱要使用同步 来解决安全问题,但是同步会降低效率,所以使用双重if()判断形式解决效率低的 问题。 实现代码: Class Singl e { Private Si ngle () {} Priv ate static S ingle s=null; Public stat ic Single ge tlnstancef) { lf(s==null) { Synchroinzed (Single.clas s) { lf(s==nul I) S=new Sing le(); } Return s; } } } 死锁:即同步的弊端,不是线程和进程没有了,而是不动了。 表现形式:同步嵌套的时候,使用的锁不一样,容易引发死锁。 实现代码: 线程间通信: 其实就是多个线程在操作同一个资源,但是操作的动作不同,动作不同,意味着线程 的任务是不一样的。就需要对任务对象进行单独的封装和描述。 等待唤醒机制:最重要的机制重点掌握 Wait ():等待:让当前线程出于冻结状态,当前线程就被存储到线程池当巾。 NotifyG;唤醒线程池屮的任意一个线程,让该线程恢复到运行状态,会具备CPU的执 行资格。 notifyAIIO:唤醒线程池中的所有等待的线程,让它们具备CPU的执行资格。 所谓的监视器:就是多线程中的锁。上面几个功能必须在同步当中,要标示清楚它所 在的锁。 也就说:wait到底让哪个锁上的线程等待了,noti fy:到底是唤醒了哪个锁上被等待 的线程。 Noti fyAII:用上面的一样。 为什么是Object巾的方法? 因为这些方法都是必须要标识出所属的锁,而锁是任意的对象。能被任意对象调用的 方法一定定义在Object类屮。一般在使用等待和唤醒时通常都得有标记。 代码优化:Res ourceDemo3.j ava class Res ource { privat e String nam e; private St ring sex; pri vate boolean flag = fals e; public syn chronized vo id set(Strin g nameStrin g sex) { if(fl ag) try{this.wait();}catc h(Exception e){} this.nam e = name; thi s.sex = sex; flag = true; this.notify(); } public sy nchronized v oid out() { if (!flag) try{t his.wait();}catch(Except ion e){} Syst em.out.print ln(name+——+sex); flag = false; thi s.notify(); } } class Input implements Runnable { Res ource r; Inpu t(Resource r) { this.r = r; public voi d run() { int x = 0; while (true) { if(x==O) r.set(Hmi ke^nan); e Ise r.set(丽丽/女女女女女 x = (x+l)%2; } } } class Outp ut implement s Runnable { R esource r; Ou tput(Resourc e r) { this.r = r; } public void run() { w hile(true) { r .out(); } } } cl ass Resourc eDemo3 { publi c static voi d main(Strin g[] args) { R esource r =new Resource (); Input in = new Input(r); Output ou t = new Outp ut(r); Thread tl = new Th read(in); Thr ead t2 = new Thread(out); tl.start(); t2.start(); } 生产者和消费者问题: 遇到的问题: 出现了错误数据,是因为多生产多消费的吋候,被唤醒的线程没有再次 判断标记就执行了

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档