最新Java实用教程第15讲Java多线程(二)(共17张PPT课件).pptx

上传人:豆**** 文档编号:24213414 上传时间:2022-07-03 格式:PPTX 页数:17 大小:152.61KB
返回 下载 相关 举报
最新Java实用教程第15讲Java多线程(二)(共17张PPT课件).pptx_第1页
第1页 / 共17页
最新Java实用教程第15讲Java多线程(二)(共17张PPT课件).pptx_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《最新Java实用教程第15讲Java多线程(二)(共17张PPT课件).pptx》由会员分享,可在线阅读,更多相关《最新Java实用教程第15讲Java多线程(二)(共17张PPT课件).pptx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第15讲讲 Java多线程(二)多线程(二) 15.1 访问共享资源访问共享资源 15.2 线程间协作线程间协作(xizu) 15.3 死锁死锁 15.4 本讲小结本讲小结第一页,共十七页。 将一个任务拆分成多个独立执行的子任务,这些子任务可以并行执行,这是使用Java多线程编程的好处,但这些子任务同时访问一个资源时,就会造成访问的冲突,在解决冲突时还要避免产生死锁,另外(ln wi),有时多个子任务之间需要协调通信来共同完成一个任务。第二页,共十七页。15.1 访问共享资源访问共享资源(zyun) 多个线程同时访问同一存储空间时可能会出现(chxin)访问冲突。如:两个线程访问同一个对象时

2、,一个线程向对象中存储数据,另一个线程读取该数据。当第一个线程还没有完成存储操作时,第二个线程就开始读取数据,这时会产生了混乱。第三页,共十七页。15.1.1 访问访问(fngwn)冲突冲突考虑(kol)下面的程序:AccessConflict.javaclass DataClassprivate int data=0;public void increase()int nd=data;tryThread.sleep(100);catch (Exception e)data=nd+1;public int getData()return data; class NThread extends

3、ThreadDataClass d;NThread(DataClass d)this.d=d;boolean alive=true;public void run()for(int i=0;i100;i+)d.increase();alive=false;public class AccessConflict public static void main(String args)DataClass d=new DataClass();NThread t1=new NThread(d);NThread t2=new NThread(d);t1.start();t2.start();while(

4、t1.alive|t2.alive);System.out.println(data=+d.getData();第四页,共十七页。15.1.2 解决解决(jiju)冲突冲突防止冲突的方法就是当资源被一个线程访问时,为这个资源加锁。Java使用关键字synchronized来实现这一过程。使用关键字synchronized修饰的方法称为同步方法,当线程调用非静态的synchronized方法时,自动获得synchronized所标示的与正在(zhngzi)执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。关键字synchronize

5、d可以修饰方法第五页,共十七页。 一个对象只有一个锁。所以,如果一个线程获得该锁,这时其它线程要想获得该对象的锁就必须等待,直到第一个线程释放(shfng)(或返回)锁。这也意味着任何其他线程都不能进入该对象上的synchronized方法或代码块,直到该锁被释放。第六页,共十七页。 同步时所注意的问题:(1)当程序运行到synchronized同步方法或代码块时才该对象锁才起作用;(2)使用private修饰域,可以防止其它线程直接访问域;(3)线程睡眠时,它所持的任何锁都不会释放;(4)一个线程可以同时获得多个(du )锁;(5)同步方法虽然可以解决同步问题,但也存在缺陷,如果一个同步方法

6、需要执行的时间很长,将会大大影响系统的效率,这时进来使用synchronized块。第七页,共十七页。15.1.3 静态方法同步静态方法同步(tngb) synchronized 修饰的静态方法可以在类的范围内防止对static数据的并发(bngf)访问,如: public synchronized static void f() synchronized 修饰的静态方法属于某个类的范围,防止多个线程同时访问这个类中的synchronized 修饰的静态方法,它可以对类的所有对象实例起作用。而synchronized的实例方法是某实例的范围,它防止多个线程同时访问这个实例中的synchroni

7、zed方法。第八页,共十七页。15.2 线程间协作线程间协作(xizu) 可以使用锁(互斥)来同步多个线程,那么如何实现多个线程间的协作呢?多个线程协作的关键在于它们之间的相互通信。互斥可以保证同一时刻只有一个线程相应某个信号,在互斥的基础上再添加某种途径,可以使线程本身挂起,直到某些(mu xi)条件发生变化再转入就绪状态。第九页,共十七页。线程间的通信通过“等待(dngdi)-通知”机制来实现,Object类中的wait()和notify()方法实现了这种机制。wait()方法可以使线程等待某个条件发生变化,而这种条件将由另外一个线程来改变。wait()不是忙等待,线程在wait()期间被

8、挂起,可以通过notify()或notifyAll()被唤醒。有两种形式的wait():(1)public final void wait()(2)public final void wait(long timeout, int nanos)第十页,共十七页。 这两种重载的wait()都能使线程等待,只不过第一个wait()是通过notify()或notifyAll()被唤醒。第二个wait()接受毫秒数作为参数,是指在此期间暂停,但这样sleep()与yield()不同: (1)在wait()期间对象锁是释放的,能够避免死锁。而在sleep()和yield()时,对象锁并没有(mi yu)被

9、释放,容易产生死锁。 (2)可以通过notify()、notifyAll()来唤醒wait(),而使用“令时间到期”的方式唤醒wait(long timeout, int nanos)。第十一页,共十七页。15.3 死锁死锁 锁机制(互斥)可以解决访问冲突,但线程可以陷入阻塞,所以会产生一种情况:第一个线程已经获得了第一个锁,在等待第二个锁,而第二个锁又被第二个线程把持,这样以此类推,最后一个线程又等待第一个锁,这样循环下去,没有哪个(n ge)线程能继续下去,这种情况被称为死锁。第十二页,共十七页。 哲学家就餐问题是一个典型的死锁例证。 问题描述:一圆桌前坐着5位哲学家,两个人中间(zhng

10、jin)有一只筷子,桌子中央有面条。哲学家思考问题,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭。上述问题会产生死锁的情况,当5个哲学家都拿起自己右手边的筷子,准备拿左手边的筷子时产生死锁现象。第十三页,共十七页。 解决办法: (1)添加一个服务生,只有当经过服务生同意之后才能(cinng)拿筷子,服务生负责避免死锁发生。 (2)每个哲学家必须确定自己左右手的筷子都可用的时候,才能同时拿起两只筷子进餐,吃完之后同时放下两只筷子。 (3)规定每个哲学家拿筷子时必须拿序号小的那只,这样最后一位未拿到筷子的哲学家只剩下序号大的那只筷子,不能拿起,剩下的这只筷子就可以被其他哲学家使用,避

11、免了死锁。这种情况不能很好的利用资源。第十四页,共十七页。15.3 本讲小结本讲小结(xioji) 本讲首先介绍了访问(fngwn)共享资源时的访问(fngwn)冲突问题,以及解决冲突的办法,而后讲述了线程之间的协作以及避免死锁的方法。第十五页,共十七页。讲后练习讲后练习(linx) 1、Java中怎么解决(jiju)访问冲突? 2、线程之间是如何通信的? 3、什么是死锁(Deadlock)?如何分析和避免死锁?第十六页,共十七页。内容(nirng)总结第15讲 Java多线程(二)。多个线程同时访问同一存储空间时可能会出现访问冲突。catch (Exception e)。this.d=d。防止冲突的方法就是当资源被一个线程访问时,为这个(zh ge)资源加锁。wait()方法可以使线程等待某个条件发生变化,而这种条件将由另外一个线程来改变。如何分析和避免死锁第十七页,共十七页。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 企业培训

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁