day13(多线程通信)总结.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文档。上传文档
查看更多
Day13总结 单列设计模式: 恶汉式: 代码体现: Class Single { Privtae static final Single s=new Single(); Private Single(){} Public static Single getInstance() { Return s; } } 懒汉式:延迟加载,存在着多线程并发访问的安全问题,需要使用同步来解决安全问题,但是同步会降低效率,所以使用双重if()判断形式解决效率低的问题。 实现代码: Class Single { Private Single(){} Private static Single s=null; Public static Single getInstance() { If(s==null) { Synchroinzed(Single.class) { If(s==null) S=new Single(); } Return s; } } } 死锁:即同步的弊端,不是线程和进程没有了,而是不动了。 表现形式:同步嵌套的时候,使用的锁不一样,容易引发死锁。 实现代码: 线程间通信: 其实就是多个线程在操作同一个资源,但是操作的动作不同,动作不同,意味着线程的任务是不一样的。就需要对任务对象进行单独的封装和描述。 等待唤醒机制:最重要的机制重点掌握 Wait():等待:让当前线程出于冻结状态,当前线程就被存储到线程池当中。 Notify();唤醒线程池中的任意一个线程,让该线程恢复到运行状态,会具备CPU的执行资格。 notifyAll():唤醒线程池中的所有等待的线程,让它们具备CPU的执行资格。 所谓的监视器:就是多线程中的锁。上面几个功能必须在同步当中,要标示清楚它所在的锁。 也就说:wait到底让哪个锁上的线程等待了,notify:到底是唤醒了哪个锁上被等待的线程。 NotifyAll:用上面的一样。 为什么是Object中的方法? 因为这些方法都是必须要标识出所属的锁,而锁是任意的对象。能被任意对象调用的方法一定定义在Object类中。一般在使用等待和唤醒时通常都得有标记。 代码优化:ResourceDemo3.java class Resource { private String name; private String sex; private boolean flag = false; public synchronized void set(String name,String sex) { if(flag) try{this.wait();}catch(Exception e){} this.name = name; this.sex = sex; flag = true; this.notify(); } public synchronized void out() { if(!flag) try{this.wait();}catch(Exception e){} System.out.println(name+----+sex); flag = false; this.notify(); } } class Input implements Runnable { Resource r; Input(Resource r) { this.r = r; } public void run() { int x = 0; while (true) { if(x==0) r.set(mike,nan); else r.set(丽丽,女女女女女); x = (x+1)%2; } } } class Output implements Runnable { Resource r; Output(Resource r) { this.r = r; } public void run() { while(true) { r.out(); } } } class ResourceDemo3 { public static void main(String[] args) { Resource r = new Resource(); Input in = new Input(r); Output out = new Output(r); Thread t1 = new Thread(in); Thread t2 = new Thread(out); t1.start(); t2.start(); } } 生产者和消费者

文档评论(0)

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

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

1亿VIP精品文档

相关文档