我完全不熟悉Java中的多线程。但我正在尝试创建一个多线程和线程安全的方法,以下是我到目前为止所提出的方法。可以使用相同的帐户使用不同线程中的源或目标参数调用此方法。因此,例如,具有帐户的线程1可以是源,而线程2可以是该传输的目的地。任何人都可以指出我正确的方向。我看过这篇文章:Java Multithreading : How to make a thread wait ?和网上的其他文章解释了同步工作的方式和我的假设是,通过在下面的代码块周围进行同步将锁定进程直到它完成。然后其他线程可以在之后获取并处理其余的线程。我对这个话题的无知提前道歉。我只是希望有人能把我放在正确的方向。有很多信息要经过,我只是希望得到一些专家指导。提前致谢
public static void transfer(BankAccount source, BankAccount destination, int amount) {
if (source.getAvailableFunds() >= amount) {
synchronized (BankAccount.class) {
source.setAvailableFunds(source.getAvailableFunds() - amount);
destination.setAvailableFunds(destination.getAvailableFunds() + amount);
}
} else {
throw new IllegalArgumentException("No funds in source: " + source);
}
}
答案 0 :(得分:0)
source and destination in different threads
你是什么意思?
由于这是一个静态方法,您可以将其称为public synchronized static void transfer
并从内部删除同步块。
同样,作为静态方法可以确保此类上的此方法不会在JVM中同时执行。
public syncronized static void transfer(BankAccount source, BankAccount destination, int amount) {
if (source.getAvailableFunds() >= amount) {
source.setAvailableFunds(source.getAvailableFunds() - amount);
destination.setAvailableFunds(destination.getAvailableFunds() + amount);
} else {
throw new IllegalArgumentException("No funds in source: " + source);
}
}
这种方式source.getAvailableFunds() >= amount
永远不会与同时更改AvailableFunds
的其他线程发生冲突。