Многопоточный банковский счет Java - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь создать приложение для банковского счета, которое будет работать с потоками.Я хочу иметь 3 разных банковских счета, но я не уверен, как это сделать.

Мой код приведен ниже:

package bankapp1;

public class Account implements Runnable {
  int balance;
  int preTransaction;
  String customerName;
  String customerId;

  Account()
  {
     balance = 6000;
  }

  public void run() {
      for (int i =1; i <=4; i++) {
          deposit(2000);
          if (getBalance() < 0 ) {
              System.out.println("account is overdrawn!");
          }
      }

  }
  public synchronized void deposit (int amount) {
      if (getBalance() >= amount ) {
          System.out.println(Thread.currentThread().getName() + " is going to withdraw $ "
          + amount);
          try {
              Thread.sleep(3000);
          } catch (InterruptedException ex) {
          }
          withdraw(amount);
          System.out.println(Thread.currentThread().getName() + " completes the withdrawl of $ "
          + amount);
      } else {
          System.out.println(" not enought in account for " + Thread.currentThread().getName()
                  + "to withdraw" + getBalance());
      }
  }


  public int getBalance() {
      return balance;
  }

  public void withdraw(int amount) {
      if (amount!=0) {
      balance = balance - amount;
      preTransaction = -amount;
      }
  }

  void getPreTransaction()
  {
      if (preTransaction > 0)
      {
          System.out.println("Deposited: " +preTransaction);
      }
      else if (preTransaction < 0) {
          System.out.println("Withdrawn: " + Math.abs(preTransaction));
      }
      else {
          System.out.println("No transaction occured");
      }
  }

}

package bankapp1;

public class ClientTesting {

    public static void main(String[] args) {
        Account acc = new Account();
        Thread t1 = new Thread(acc);
        Thread t2 = new Thread(acc);
        t1.setName("pinelopi");
        t2.setName("andreas");

        t1.start();
        t2.start();

    }
}

Нужно ли мне создавать еще один класс SavingAccount с почти такими же реализациями, как у класса Account, а затем вызывать его в классе ClientTesting, как я это делал сКласс учетной записи?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вы можете отправить свои Runnable задачи на ExecutorService, например,

ExecutorService execService = null;
try {
    Account acc = new Account();
    execService = Executors.newFixedThreadPool(2);
    execService.submit(acc);
    execService.submit(acc);
    execService.submit(acc);
} finally {
    execService.shutdown();
}
0 голосов
/ 24 октября 2018

Попробуйте что-нибудь подобное.

 public class Account1 implements Runnable {
 @Override
 public void run() {
    try {

    //logic here

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
 }

}

   public class Account2 implements Runnable
   public class Account3 implements Runnable

   public interface ThreadFactory {
        Thread newTread(Runnable runnable);
     }

    public class MyThreadFactory implements ThreadFactory {
     private String name;
     public MyThreadFactory(String name){
       this.name = name;
       }

    @Override
    public Thread newTread(Runnable runnable) {
     Thread t = new Thread(runnable);
    }

    // here addition logic (deposit, getBalance, ...)


    public class Main {
       public static void main(String[] args) {
       MyThreadFactory factory=new MyThreadFactory("MyThreadFactory");
       Thread th1 = factory.newTread(new Account1());
       Thread th2 = factory.newTread(new Account2());   
       Thread th3 = factory.newTread(new Account3());   
       th1.start();
       th2.start();
       th3.start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...