java se 101 synchronized关键字深入详解

java se 101 synchronized关键字深入详解

ID:18448868

大小:340.74 KB

页数:17页

时间:2018-09-18

java se 101 synchronized关键字深入详解_第1页
java se 101 synchronized关键字深入详解_第2页
java se 101 synchronized关键字深入详解_第3页
java se 101 synchronized关键字深入详解_第4页
java se 101 synchronized关键字深入详解_第5页
资源描述:

《java se 101 synchronized关键字深入详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、JavaSE101synchronized关键字深入详解一、停止一个线程的方式不能使用Thread类的stop方法来终止线程的执行。一般要设定一个变量,在run方法中是一个循环,循环每次检查该变量,如果满足条件则继续执行,否则跳出循环,线程结束。二、不能依靠线程的优先级来决定线程的执行顺序。1、为什么要引入同步机制在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源。必须对这种潜在资源冲突进行预防。解决方法:在线程使用一个资源时为其加锁即可。访问资源的第一个线程为其加上锁以后,其他线程便不能再使用那个资源,除非被解锁。银行取钱:

2、两个线程对同一个账户取钱:packagecom.javase.thread;/***该类完成银行取钱功能*两个人同时在一个账户上取钱*@authorx_xiongjie**/publicclassTetchMoney{/***生成两个线程分别去取钱*/publicstaticvoidmain(String[]args){//生成账户Bankbank=newBank();Threadt1=newMoneyThread(bank);//柜台Threadt2=newMoneyThread(bank);//取款机//开始取钱t1.start();t2.

3、start();/***两个线程start之后,分别取出了800元钱*/}}classBank{privateintmoney=1000;/***返回实际取到钱的数目*number表示取的钱*@return*实际取多少钱,取多少钱我就是多少钱,为什么这里还要返回一个int呢?这个值不是和传进来的值一样吗?*这是不一定的,如果有1000块钱,我给柜台小姐说,给我取2000,那这种情况我们就认为是个错误。这时候就不能返回2000了,返回一个*-1,来表示这个错误,因为不知道账户里面有多少钱。*/publicintgetMoney(intnumber

4、){if(number<0){return-1;}elseif(number>money){return-2;}elseif(money<0){return-3;}else{try{//完成取钱之前的准备工作Thread.sleep(1000);}catch(InterruptedExceptione){e.printStackTrace();}money-=number;//第一个线程减掉800剩200,这个时刻,第二个线程把200减了800变成了-600//接下来,第一个线程或者是第二个线程开始打印,谁先打印不清楚,没法预料会出现//什么情

5、况,无论是出现200或者是-600,这都是正常情况,唯一能确定的是最后剩//的钱一定是-600System.out.println("leftmoney:"+money);returnnumber;}}}/***线程类:从柜台取,从取款机取*因为线程要操纵*@authorx_xiongjie**/classMoneyThreadextendsThread{privateBankbank;publicMoneyThread(Bankbank){this.bank=bank;}//从账户里面扣掉取的钱@Overridepublicvoidrun()

6、{System.out.println(bank.getMoney(800));}}两个线程对各自的账户取钱:packagecom.javase.thread;/***该类完成银行取钱功能*两个人同时在一个账户上取钱*@authorx_xiongjie**/publicclassTetchMoney{/***生成两个线程分别去取钱*/publicstaticvoidmain(String[]args){//生成账户Bankbank=newBank();Threadt1=newMoneyThread(bank);//柜台bank=newBank(

7、);//两个账户对各自的账户取钱Threadt2=newMoneyThread(bank);//取款机//开始取钱t1.start();t2.start();/***两个线程start之后,分别取出了800元钱*/}}classBank{privateintmoney=1000;/***返回实际取到钱的数目*number表示取的钱*@return*实际取多少钱,取多少钱我就是多少钱,为什么这里还要返回一个int呢?这个值不是和传进来的值一样吗?*这是不一定的,如果有1000块钱,我给柜台小姐说,给我取2000,那这种情况我们就认为是个错误。这时

8、候就不能返回2000了,返回一个*-1,来表示这个错误,因为不知道账户里面有多少钱。*/publicintgetMoney(intnumber){if

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

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

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