java

位置:IT落伍者 >> java >> 浏览文章

Java开发中多线程同步技巧[3]


发布日期:2023年09月09日
 
Java开发中多线程同步技巧[3]

为什么会出现这样的问题?这就是多线程中的同步的问题在我们的程序中Account中的amount会同时被多个线程所访问这就是一个竞争资源通常称作竞态条件对于这样的多个线程共享的资源我们必须进行同步以避免一个线程的改动被另一个线程所覆盖在我们这个程序中Account中的amount是一个竞态条件所以所有对amount的修改访问都要进行同步我们将deposit()和withdraw()方法进行同步修改为

public synchronized void deposit(float amt)

{

float tmp = amount;

tmp += amt;

try

{

Threadsleep();

//模拟其它处理所需要的时间比如刷新数据库等

}

catch (InterruptedException e)

{

// ignore

}

amount = tmp;

}

public synchronized void withdraw(float amt)

{

float tmp = amount;

tmp = amt;

try

{

Threadsleep();

//模拟其它处理所需要的时间比如刷新数据库等

}

catch (InterruptedException e)

{ // ignore }

amount = tmp;

}

此时再运行我们就能够得到正确的结果了Account中的getBalance()也访问了amount为什么不对getBalance()同步呢?因为getBalance()并不会修改amount的值所以同时多个线程对它访问不会造成数据的混乱

[] [] []

               

上一篇:用JAVA实现线程等待提示框[1]

下一篇:Java开发中多线程同步技巧[2]