Java SE 101 synchronized关键字深入详解.docxVIP

  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文档。上传文档
查看更多
Java SE 101 synchronized关键字深入详解.docx

Java SE 101 synchronized关键字深入详解停止一个线程的方式不能使用Thread类的stop方法来终止线程的执行。一般要设定一个变量,在run方法中是一个循环,循环每次检查该变量,如果满足条件则继续执行,否则跳出循环,线程结束。二、不能依靠线程的优先级来决定线程的执行顺序。为什么要引入同步机制在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源。必须对这种潜在资源冲突进行预防。解决方法:在线程使用一个资源时为其加锁即可。访问资源的第一个线程为其加上锁以后,其他线程便不能再使用那个资源,除非被解锁。银行取钱:两个线程对同一个账户取钱:package com.javase.thread;/** * 该类完成银行取钱功能 * 两个人同时在一个账户上取钱 * @author x_xiongjie * */publicclass TetchMoney {/** * 生成两个线程分别去取钱 */publicstaticvoid main(String[] args) {//生成账户Bank bank = new Bank();Thread t1 = new MoneyThread(bank);//柜台Thread t2 = new MoneyThread(bank);//取款机//开始取钱t1.start();t2.start();/** * 两个线程start之后,分别取出了800元钱 */}}class Bank{privateintmoney = 1000;/** * 返回实际取到钱的数目 * number表示取的钱 * @return * 实际取多少钱,取多少钱我就是多少钱,为什么这里还要返回一个int呢?这个值不是和传进来的值一样吗? * 这是不一定的,如果有1000块钱,我给柜台小姐说,给我取2000,那这种情况我们就认为是个错误。这时候就不能返回2000了,返回一个 * -1,来表示这个错误,因为不知道账户里面有多少钱。 */publicint getMoney(int number){if(number0){return -1;}elseif(numbermoney){return -2;}elseif(money0){return -3;}else{try {//完成取钱之前的准备工作Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}money -= number;//第一个线程减掉800剩200,这个时刻,第二个线程把200减了800变成了-600//接下来,第一个线程或者是第二个线程开始打印,谁先打印不清楚,没法预料会出现//什么情况,无论是出现200或者是-600,这都是正常情况,唯一能确定的是最后剩//的钱一定是-600System.out.println(left money: +money);return number;}}}/** * 线程类:从柜台取,从取款机取 * 因为线程要操纵 * @author x_xiongjie * */class MoneyThread extends Thread{private Bank bank;public MoneyThread(Bank bank){this.bank = bank;}//从账户里面扣掉取的钱@Overridepublicvoid run() {System.out.println(bank.getMoney(800));}}两个线程对各自的账户取钱:package com.javase.thread;/** * 该类完成银行取钱功能 * 两个人同时在一个账户上取钱 * @author x_xiongjie * */publicclass TetchMoney {/** * 生成两个线程分别去取钱 */publicstaticvoid main(String[] args) {//生成账户Bank bank = new Bank();Thread t1 = new MoneyThread(bank);//柜台bank = new Bank();//两个账户对各自的账户取钱Thread t2 = new MoneyThread(bank);//取款机//开始取钱t1.start();t2.start();/** * 两个线程start之后,分别取出了800元钱 */}}class Bank{privateintmoney = 1000;/** * 返回实际取到钱的数目 * number表示取的钱 * @return * 实际取多少钱,取多少钱我就是多少钱,为什么这里还要返回一个int呢?这个值不是和传进来的值一样吗?

文档评论(0)

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

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

1亿VIP精品文档

相关文档