public class Account {
private String actno;
private double balance;
public Account() {
}
public Account(String actno, double balance) {
this.actno = actno;
this.balance = balance;
}
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
// 取款的方法
/*
在实例方法上使用synchronized,锁的是this,不灵活
整个方法体都需要同步,扩大同步范围,程序的执行效率降低
如果共享的对象就是this,并且需要同步的代码块是整个方法体,使用这种方式
在静态方法上使用synchronized,锁的是类,无论创建了多少对象,类锁只有一个
*/
public synchronized void withDraw(double money) {
double before = this.getBalance();
double after = before - money;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.setBalance(after);
}
}
javase:线程安全
最新推荐文章于 2024-09-25 10:59:43 发布
该博客探讨了Java中使用`synchronized`关键字实现线程安全的取款操作。在`Account`类中,`withDraw`方法被声明为同步方法,确保同一时间只有一个线程可以执行该操作。博客指出,尽管这降低了程序执行效率,但在特定场景下,当共享对象为`this`且需要同步整个方法体时,这种方式是合适的。同时,也提到了在静态方法上使用`synchronized`的情况。
摘要由CSDN通过智能技术生成