Java中的多线程方法

时间:2015-01-08 05:23:17

标签: java multithreading synchronization

我完全不熟悉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);
    }

}

1 个答案:

答案 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的其他线程发生冲突。