/**
*
*
* A small class to handle deposits and withdrawls from a bank account
*
*/
package spendingsimulation;
//import java.util.Random;
public class BankAccount
{
public int accountBalance;
public int incomeAmt;
public BankAccount()
{
accountBalance = 0 ;
//incomeAmt = 0;
}
public void deposit(int addAmount, String name)
{
// the 'name' argument holds the name of the source of this credit
accountBalance+=addAmount ;
System.out.println(name + " added " + addAmount) ;
System.out.println("Account balance is now standing at " + accountBalance);
}
public void withdraw(int takeAmount, String name)
{
// the 'name' argument holds the name of the bill being paid
accountBalance-=takeAmount ;
System.out.println(name + " took " + takeAmount) ;
System.out.println("Account balance is now standing at " + accountBalance);
}
public int getBalance()
{
return accountBalance ;
}
//@Override
/*public void run()
{
try
{
deposit(incomeAmt, incomeS1);
getBalance();
Thread.sleep(100) ;
} // End of try block
catch(InterruptedException ex)
{
System.out.println(typeOfUtility + " Terminated early") ;
} // End of Catch clause
System.out.println(typeOfUtility + " has finished") ;
} // End of method run()
*/
} // End of class BankAccount
package spendingsimulation;
import java.lang.Thread ;
public class SpendMain {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
System.out.println("Viewing expenditure");
// Incoming payments
Thread incomeS1 = new Thread(new Incomming("Wage Recieved", 2000, 1000));
Thread incomeS2 = new Thread(new Incomming("Interest Recieved", 10, 4000));
// Outgoing costs
Thread outgoingS1 = new Thread(new Consumables("Oil Bill", 250, 3000)) ;
Thread outgoingS2 = new Thread(new Consumables("Food Bill", 600, 1000)) ;
Thread outgoingS3 = new Thread(new Consumables("Electricity Bill", 50, 1000)) ;
Thread outgoingS4 = new Thread(new Consumables("Entertrainment Bill", 400, 1000)) ;
Thread outgoingS5 = new Thread(new Consumables("Shopping Bill", 200, 1000)) ;
System.out.println("Expenditure commencing") ;
// Get the threads going
//Incomming
incomeS1.start();
incomeS2.start();
// Outgoing
outgoingS1.start();
outgoingS2.start();
outgoingS3.start();
outgoingS4.start();
outgoingS5.start();
System.out.println("Expenditure is now underway.") ;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package spendingsimulation;
import java.util.Random;
/**
*
* @author B00533474
*/
public class Incomming implements Runnable {
//private int workingTime ;
private String typeOfUtility ;
// private Random randGen ;
//private int incomingAmt;
public Incomming(String name, int addAmount, int time){
typeOfUtility = name ;
// randGen = new Random();
//workingTime = randGen.nextInt(10000) ; // Up to 10 seconds
// outgoingAmt = amt;
}
//@Override
public void run()
{
try
{
System.out.println(typeOfUtility + " has come into the account");
System.out.println(" The balance on the account is now: ");
//this.getBalance();
Thread.sleep(1000) ;
} // End of try block
catch(InterruptedException ex)
{
System.out.println(typeOfUtility + " Terminated early") ;
} // End of Catch clause
System.out.println(typeOfUtility + " has finished") ;
} // End of method run()
}
多线程Java应用程序
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package spendingsimulation;
import java.util.Random;
import java.util.Timer;
/**
*
* @author B00533474
*/
public class Consumables implements Runnable {
private int workingTime ;
private String typeOfUtility ;
private Random randGen ;
private int incomeAmt;
Consumables(String name, int amt, int time) {
typeOfUtility = name ;
randGen = new Random();
workingTime = randGen.nextInt(10000) ; // Up to 10 seconds
incomeAmt = amt;
}
@Override
public void run() {
Timer myTimer = new Timer();
}
}
我的问题是,我不知道有多少,或run()方法应该在什么类以及如何正确访问和使用Bank Account类。我也不确定如何使用定时器课程,我希望每一秒都能代表一周。任何帮助将非常感激。我创建它模拟一个人的消费模式
有没有什么事情可以解决这个问题?如果您告诉我们迄今为止已尝试的内容,我们将更愿意回答您的问题。 (有用的链接提出更好的问题:[问],[FAQ]) – Doorknob 2013-04-25 23:15:36
此外,你的问题有相当多的代码。为了更快地获得更好的帮助,请发布[SSCCE(链接)](http://sscce.org)。 – Doorknob 2013-04-25 23:16:02
我建议你在开始之前先让银行账户线程安全,然后再移动到用线程敲打它。提示,'整数'不是线程安全的。 JVM不保证即使写入也是原子的。而且,如果没有volatile,其他线程不太可能看到写入。 – 2013-04-25 23:23:01