网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java 程序中的多线程(三)     
  文章作者:未知  文章来源:水木森林  
  查看:99次  录入:管理员--2007-11-17  
 
  作者: neel v. kumar
  synchronized 关键字
  到目前为止,我们看到的示例都只是以非常简单的方式来利用线程。只有最小的数据流,而且不会出现两个线程访问同一个对象的情况。但是,在大多数有用的程序中,线程之间通常有信息流。试考虑一个金融应用程序,它有一个 account 对象,如下例中所示:
  一个银行中的多项活动
  public class account {
  string holdername;
  float amount;
  public account(string name, float amt) {
  holdername = name;
  amount = amt;
  }
  public void deposit(float amt) {
  amount += amt;
  }
  public void withdraw(float amt) {
  amount -= amt;
  }
  public float checkbalance() {
  return amount;
  }
  }
  在此代码样例中潜伏着一个错误。如果此类用于单线程应用程序,不会有任何问题。但是,在多线程应用程序的情况中,不同的线程就有可能同时访问同一个 account 对象,比如说一个联合帐户的所有者在不同的 atm 上同时进行访问。在这种情况下,存入和支出就可能以这样的方式发生:一个事务被另一个事务覆盖。这种情况将是灾难性的。但是,java 编程语言提供了一种简单的机制来防止发生这种覆盖。每个对象在运行时都有一个关联的锁。这个锁可通过为方法添加关键字   synchronized 来获得。这样,修订过的 account 对象(如下所示)将不会遭受像数据损坏这样的错误:
  对一个银行中的多项活动进行同步处理
  public class account {
  string holdername;
  float amount;
  public account(string name, float amt) {
  holdername = name;
  amount = amt;
  }
  public synchronized void deposit(float amt) {
  amount += amt;
  }
  public synchronized void withdraw(float amt) {
  amount -= amt;
  }
  public float checkbalance() {
  return amount;
  }
  }
  deposit() 和 withdraw() 函数都需要这个锁来进行操作,所以当一个函数运行时,另一个函数就被阻塞。请注意,checkbalance() 未作更改,它严格是一个读函数。因为 checkbalance() 未作同步处理,所以任何其他方法都不会阻塞它,它也不会阻塞任何其他方法,不管那些方法是否进行了同步处理。
 
 
上一篇: java 程序中的多线程(四)    下一篇: java 程序中的多线程(二)
  相关文档
ejb设计模式5 11-17
java socket编程(三) 11-17
为 swt windows桌面程序定制适合分发的 jre 11-17
struts1.2.2新功能全新体验 11-17
ejb3.0新规范概览及其未来发展 11-16
使用jms在集群应用程序中分配任务(图) 11-17
java自动在中关村二手市场发布信息 11-17
web开发正确方向 javascript是一个错误吗? 08-26
string和stringbuffer类字符串的区别 11-17
用java绘制google中文名称“谷歌” 11-17
垃圾清理势在必行——java垃圾收集算法 11-17
java基础知识--简单的hibernate入门 01-29
NetBeans Mobility Pack 5.5 快速入门指南 04-14
java 理论与实践: 关于异常的争论 11-17
java 编程规范 11-17
java语言的一些关键特性 11-17
将你的apache速度提高十倍 11-17
六个 for 循环的java小程序源码展播 11-17
flex开发步骤——配置过程总结 11-17
java 学习之的对象初始化的讲究 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息