易截截图软件、单文件、免安装、纯绿色、仅160KB

Java开发中多线程同步技巧

在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用。
 我们首先编写一个非常简单的多线程的程序,是模拟银行中的多个线程同时对同一个储蓄账户进行存款、取款操作的。
  在程序中我们使用了一个简化版本的Account类,代表了一个银行账户的信息。在主程序中我们首先生成了1000个线程,然后启动它们,每一个线程都对John的账户进行存100元,然后马上又取出100元。这样,对于John的账户来说,最终账户的余额应该是还是1000元才对。然而运行的结果却超出我们的想像,首先来看看我们的演示代码:
class Account
{
 String name; float amount;
 public Account(String name, float amount)
 {
  this.name = name;
  this.amount = amount;
 }
 
 public void deposit(float amt)
 {
  float tmp = amount;
  tmp += amt;
  try
  {
   Thread.sleep(100);
   //模拟其它处理所需要的时间,比如刷新数据库等
  }
  catch (InterruptedException e)
  {
   // ignore
  }
  amount = tmp;
 }
 public void withdraw(float amt)
 {
  float tmp = amount;
  tmp -= amt;
  try
  {
   Thread.sleep(100);
   //模拟其它处理所需要的时间,比如刷新数据库等
  }
  catch (InterruptedException e)
  {
   // ignore
  }
  amount = tmp;
 }
 public float getBalance()
 {
  return amount;
  }
}
public class AccountTest
{
 private static int NUM_OF_THREAD = 1000;
 static Thread[] threads = new Thread[NUM_OF_THREAD];
 public static void main(String[] args)
 {
  final Account acc = new Account("John", 1000.0f);
  for (int i = 0; i< NUM_OF_THREAD; i++)
  {
   threads[i] = new Thread(new Runnable()
   {
    public void run()
    {
     acc.deposit(100.0f);
     acc.withdraw(100.0f);
    }
   }
   );
  threads[i].start();
 }
 for (int i=0; i<NUM_OF_THREAD; i++)
 {
  try { threads[i].join();
  //等待所有线程运行结束
 }
 catch (InterruptedEx


相关文档:

传智播客Java学习 jquery

我今天学习 了佟老师讲的Jquery框架的知识,使用jquery是的开发js非常的容易,我做了就简单的笔记:
 
 
jQuery 中的事件 --  加载 DOM :
l         在页面加载完毕后, 浏览器会通过 JavaScript 为 DOM 元素添加事件. 在常规的 JavaScript 代码中, 通常使用 window. ......

Java的同步机制和synchronized关键字

开发者有时创建的多线程程序会生成错误值或产生其它奇怪的行为。古怪行为一般出现在一个多线程程序没使用同步连载线程访问关键代码部份的时候。同步连载线程访问关键代码部份是什么意思呢?在这篇文章中解释了同步,Java的同步机制,以及当开发者没有正确使用这个机制时出现的两个问题。一旦你看完这篇文章,你就可以避免在 ......

如何用Java平台访问开源云存储?


如何用Java平台访问开源云存储?
2009年10月                     作者:简竹/译 
尽管云计算这一术语并不新鲜(Amazon在2006年就开始提供它的云服务),但从2008年起它才开始真正成为流行词,这期间,Google和Ama ......

JAVA开源工具大全

Spring Framework  【Java开源 J2EE框架】
Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的 Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用 ......

Java多线程编程详解

一:理解多线程
多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号