day13(多线程通信)总结 

day13(多线程通信)总结 

ID:20905393

大小:84.50 KB

页数:8页

时间:2018-10-17

day13(多线程通信)总结 _第1页
day13(多线程通信)总结 _第2页
day13(多线程通信)总结 _第3页
day13(多线程通信)总结 _第4页
day13(多线程通信)总结 _第5页
资源描述:

《day13(多线程通信)总结 》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Dayl3总结1.单列设计模式:1.恶汉式:代码体现:ClassSingle{PrivtaestaticfinalSingles=newSingle();PrivateSingle(){}PublicstaticSinglegetlnstance(){Returns;}}2.懒汉式:延迟加载,存在着多线程并发访问的安全问题,箱要使用同步来解决安全问题,但是同步会降低效率,所以使用双重if()判断形式解决效率低的问题。实现代码:ClassSingle{PrivateSingle(){}PrivatestaticSingles=null;Publ

2、icstaticSinglegetlnstancef){lf(s==null){Synchroinzed(Single.class){lf(s==nulI)S=newSingle();}Returns;}}}1.死锁:即同步的弊端,不是线程和进程没有了,而是不动了。表现形式:同步嵌套的时候,使用的锁不一样,容易引发死锁。实现代码:2.线程间通信:其实就是多个线程在操作同一个资源,但是操作的动作不同,动作不同,意味着线程的任务是不一样的。就需要对任务对象进行单独的封装和描述。3.等待唤醒机制:最重要的机制重点掌握Wait():等待:让当前线程出

3、于冻结状态,当前线程就被存储到线程池当巾。NotifyG;唤醒线程池屮的任意一个线程,让该线程恢复到运行状态,会具备CPU的执行资格。notifyAIIO:唤醒线程池中的所有等待的线程,让它们具备CPU的执行资格。所谓的监视器:就是多线程中的锁。上面几个功能必须在同步当中,要标示清楚它所在的锁。也就说:wait到底让哪个锁上的线程等待了,notify:到底是唤醒了哪个锁上被等待的线程。NotifyAII:用上面的一样。为什么是Object巾的方法?因为这些方法都是必须要标识出所属的锁,而锁是任意的对象。能被任意对象调用的方法一定定义在Obje

4、ct类屮。一般在使用等待和唤醒时通常都得有标记。代码优化:ResourceDemo3.javaclassResource{privateStringname;privateStringsex;privatebooleanflag=false;publicsynchronizedvoidset(Stringname'Stringsex){if(flag)try{this.wait();}catch(Exceptione){}this.name=name;this.sex=sex;flag=true;this.notify();}publicsy

5、nchronizedvoidout(){if(!flag)try{this.wait();}catch(Exceptione){}System.out.println(name+"——"+sex);flag=false;this.notify();}}classInputimplementsRunnable{Resourcer;Input(Resourcer){this.r=r;publicvoidrun(){intx=0;while(true){if(x==O)r.set(Hmike'^nan");eIser.set("丽丽"/女女女女女x

6、=(x+l)%2;}}}classOutputimplementsRunnable{Resourcer;Output(Resourcer){this.r=r;}publicvoidrun(){while(true){r.out();}}}classResourceDemo3{publicstaticvoidmain(String[]args){Resourcer=newResource();Inputin=newInput(r);Outputout=newOutput(r);Threadtl=newThread(in);Threadt2=ne

7、wThread(out);tl.start();t2.start();}1.生产者和消费者问题:遇到的问题:1.出现了错误数据,是因为多生产多消费的吋候,被唤醒的线程没有再次判断标记就执行了,解决时将if判断边成while循环判断,(这种方式是最安全的)2.有了while判断后死锁了,因为本方线程唤醒的有可能还是本方线程,所以导致死锁,解决:本方必须唤醒对放才有效,notify只能啖醒一个,还不确定,所以干脆唤醒所有的,肯定包含对象,至于被唤醒的本方会判断标记是否继续等待。实现代码:ClassResource{PrvateStringname

8、;Privateintcount;Privatebooleanflag;Privatesynchronizedvoidset(Stringname){While(f

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。