知识大全 Java开发中多线程同步技巧[3]
Posted 条件
篇首语:好汉做事干到底,好马登程跑到头。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java开发中多线程同步技巧[3]相关的知识,希望对你有一定的参考价值。
Java开发中多线程同步技巧[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
为什么会出现这样的问题?这就是多线程中的同步的问题 在我们的程序中 Account中的amount会同时被多个线程所访问 这就是一个竞争资源 通常称作竞态条件 对于这样的多个线程共享的资源我们必须进行同步 以避免一个线程的改动被另一个线程所覆蓋 在我们这个程序中 Account中的amount是一个竞态条件 所以所有对amount的修改访问都要进行同步 我们将deposit()和withdraw()方法进行同步 修改为
public synchronized void deposit(float amt) float tmp = amount; tmp += amt; try Thread sleep( ); //模拟其它处理所需要的时间 比如刷新数据库等 catch (InterruptedException e) // ignore amount = tmp; public synchronized void withdraw(float amt) float tmp = amount; tmp = amt; try Thread sleep( ); //模拟其它处理所需要的时间 比如刷新数据库等 catch (InterruptedException e) // ignore amount = tmp;
此时 再运行 我们就能够得到正确的结果了 Account中的getBalance()也访问了amount 为什么不对getBalance()同步呢?因为getBalance()并不会修改amount的值 所以 同时多个线程对它访问不会造成数据的混乱 cha138/Article/program/Java/gj/201311/27674相关参考