Java:
package AccountThread;
public class Account {
private int balance;
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
}
Java:
package AccountThread;
public class MoneyRunner implements Runnable {
private Account account;
private int amount;
public MoneyRunner(Account account, int amount) {
this.account = account;
this.amount = amount;
}
@Override
public void run() {
int balance = account.getBalance();
int total = balance + amount;
System.out.println("Total: " + total);
account.setBalance(total);
}
}
Java:
import AccountThread.Account;
import AccountThread.MoneyRunner;
public class AccountTest {
public static void main(String[] args){
Account account = new Account();
Thread thread = new Thread(new MoneyRunner(account, 5));
Thread thread1 = new Thread(new MoneyRunner(account, 10));
thread.start();
thread1.start();
try{
thread.join();
thread1.join();
}catch (InterruptedException e){
System.err.println("Thread was interrupted!");
}
System.out.println(account.getBalance());
}
}
Ergebnis ist immer unterschiedlich, manchmal 10, manchmal 5 und manchmal 15. Wie kann ich mit diesem Konflikt umgehen, so dass die Reihenfolge eingehalten wird und die Werten werden nicht überschrieben.