例银行帐户的存取款线程设计(线程同步)

例银行帐户的存取款线程设计(线程同步)

ID:5899781

大小:46.00 KB

页数:8页

时间:2017-12-27

例银行帐户的存取款线程设计(线程同步)_第1页
例银行帐户的存取款线程设计(线程同步)_第2页
例银行帐户的存取款线程设计(线程同步)_第3页
例银行帐户的存取款线程设计(线程同步)_第4页
例银行帐户的存取款线程设计(线程同步)_第5页
资源描述:

《例银行帐户的存取款线程设计(线程同步)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、例银行帐户的存取款线程设计。本例设计三个类,银行帐户类Account1、存款线程类Save1和取款线程类Fetch1。程序如下:一、未考虑同步问题(未锁定)classAccount1//帐户缓冲区{privateStringname;privateintvalue;voidput(inti)//欲存入金额i{value=value+i;//存入时,value值增加}intget(inti)//欲取金额i,返回实际取到金额{if(value>i)value=value-i;//取走时,value值减少else//帐户金额不够所取时{i=value;value=0;//

2、取走全部所余金额}returni;}inthowmatch()//查看帐户上现有金额{returnvalue;}}classSave1extendsThread//存款线程{privateAccount1a1;privateintamount;publicSave1(Account1a1,intamount){this.a1=a1;this.amount=amount;}publicvoidrun(){intk=a1.howmatch();try{sleep(1);//花费时间}catch(InterruptedExceptione){System.out.prin

3、tln(e);}a1.put(amount);System.out.println("现有"+k+",存入"+amount+",余额"+a1.howmatch());}classFetch1extendsThread//取款线程{privateAccount1a1;privateintamount;publicFetch1(Account1a1,intamount){this.a1=a1;this.amount=amount;}publicvoidrun(){intk=a1.howmatch();try{sleep(1);//花费时间}catch(Interrupt

4、edExceptione){System.out.println(e);}System.out.println("现有"+k+",取走"+a1.get(amount)+",余额"+a1.howmatch());}}publicstaticvoidmain(Stringargs[]){Account1a1=newAccount1();(newSave1(a1,100)).start();(newSave1(a1,200)).start();(newFetch1(a1,500)).start();}}程序运行结果:现有0,存入100,余额100现有0,存入200,余额3

5、00现有0,取走300,余额01)SynchronizedSynchronized锁定一段代码,称为创建一个代码临界区,使得线程必须等候特定资源的所有权。当第一个线程执行这段代码时,它获取特定的对象的所有权,即拥有该对象的锁。此时,如果有第二个线程对同一个对象也要执行这段代码时,它试图获取该对象的所有权,但因该对象已被锁定,则第二个线程必须等待,直到锁被释放为止。第一个线程执行完<语句>后,自动释放了锁,接下去第二个线程获得锁并可运行。这样就形成了多个线程对同一个对象的“互斥”使用方式,该对象称为“同步对象”。这种锁定方式是针对某个特定对象而言的。如果有两个线程同时

6、对两个不同的对象进行操作,则没有锁定,它们可以同时进入代码的临界区二、带锁定的存取款线程设计。classSave2extendsThread//存款线程{privateAccount1a1;privateintamount;publicSave2(Account1a1,intamount){this.a1=a1;this.amount=amount;}publicvoidrun(){synchronized(a1)//锁定帐户对象{intk=a1.howmatch();try{sleep(1);//花费时间}catch(InterruptedExceptione){

7、System.out.println(e);}a1.put(amount);System.out.println("现有"+k+",存入"+amount+",余额"+a1.howmatch());}}publicstaticvoidmain(Stringargs[]){Account1a1=newAccount1();(newSave2(a1,100)).start();(newSave2(a1,200)).start();(newFetch2(a1,500)).start();}}classFetch2extendsThread//取款线程{privateAc

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

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

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