/** * This method opens a bank account * * @param bankName * @param firstName * @param lastName * @param emailId * @param phoneNumber * @param password * @return accountNumber */ @Override public String openAccount( String bank, String firstName, String lastName, String emailId, String phoneNumber, String password) { accountCount++; if (accountCount == 3) { return "Anunay"; } System.out.println("1"); try { blockingQueue.put( new Date() + ": " + firstName + " " + lastName + " has initiated a request to open an account at " + bank); } catch (InterruptedException e) { System.out.println(e.getMessage()); e.printStackTrace(); } Customer account = new Customer(); account.setFirstName(firstName); account.setLastName(lastName); account.setEmailId(emailId); account.setPhoneNumber(phoneNumber); account.setPassword(password); account.setCreditLimit(1000); String accountNo = null; synchronized (counter) { System.out.println("test1"); int accountSequence = counter.incrementAndGet(); accountNo = firstName.charAt(0) + "" + accountSequence; // counter.set(new AtomicInteger(accountSequence)); account.setAccountNumber(accountNo); } List<Customer> accountList = accountMap.get(accountNo.charAt(0)); System.out.println("test2"); if (accountList == null) { System.out.println("test3"); accountList = new ArrayList<Customer>(); } else { Iterator<Customer> accountIterator = accountList.iterator(); System.out.println("test4"); while (accountIterator.hasNext()) { Customer acct = accountIterator.next(); if ((acct.getFirstName()).equals(firstName) && (acct.getLastName().equals(lastName)) && (acct.getEmailId()).equals(emailId)) { return "Already-" + acct.getAccountNumber(); } System.out.println("test5"); } } synchronized (accountList) { System.out.println("test6"); accountList.add(account); accountMap.put(firstName.charAt(0), accountList); System.out.println("test7"); } System.out.println("test8"); return accountNo; }