Synchronising threads

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • AbrahamNkomo
    New Member
    • Aug 2010
    • 4

    Synchronising threads

    l have this assignment to do:

    Synchronize access to the instance variable, accBalance. Because accBalance is a double and not an object, it cannot be used as the monitor. Use synchronized methods or synchronized blocks of code, as appropriate. Simultaniously test two threads. Because the threads can complete too quickly to determine if they are interfering with each other, delay the adding of a deposit by inserting the following code within the synchronized block or method:

    Code:
        try
        {
        Thread.currentThread().sleep(10000);
        }
        catch(InterruptedException e) {}
    I've been strugling with this thing for weeks now, I just don't get Synchronization .l just want some advice, a push in the right direction etc.. This is the code that I have to Synchronize:


    Code:
    /*
     Chapter 12 : Implementing session Tracking 
     Programmer : Abraham Nkomo
     Date       : 21-02-2012
     Filename   : SessionBank.java
     Purpose    : This servlet use session tracking to store 
                   the bslsnce as a session attribute
     */
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.text.DecimalFormat;
    
    public class SessionBank extends HttpServlet
    {
        // Create Class Variable
    
        DecimalFormat myFormat = new DecimalFormat("$#,000.00");
    
        public void doGet(HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException 
        {
            doPost(req, res);
        }
    
        public void doPost(HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException
        
        {
            //Makes instance variable a local variable
            double accBalance = 500.00;
    
            //Set MIME type of content returned to browser
            res.setContentType("text/html");
            PrintWriter out = res.getWriter();
    
            //Starts outputting the HTML Form
            out.println("<html><head>"
                    + "<title>Online Bank Simulator</title>"
                    + "</head><body>"
                    + "<hr color=\"#808000\">"
                    + "<center><h1>Banking Simulation</h1></center>"
                    + "<form method=\"POST\" action=\"../servlet/SessionBank\">"
                    + "<center>Amount: <input type=\"text\" name=\"Amount\" size=\"20\"></center>");
    
            //Decides which action to take
            String action = req.getParameter("act");
    
            if (action != null) {
                if (action.equals("Deposit"))
                {
                    try
                    {
                    double amount;
                    String strAmount = req.getParameter("Amount");
                    amount = Double.parseDouble(strAmount);
    
                    if (amount <= 0.00)
                    {
                        out.println("<h2>Error: The amount is either null or a minus</h2>");
                    } else 
                    {
                        accBalance = accBalance + amount;
                        out.println("<br><center>Balance:" + myFormat.format(accBalance) + " </center> <br>");
                    }
                    }
                                catch(NumberFormatException e)
                                {
                                 out.println("<font color=\"red\"><h2>Error :The amount entered is either null or invalid</h2></font>");   
                                }
                }
                else if (action.equals("Withdraw"))
                {
                   try
                       
                        {
                    double amount;
                    String strAmount = req.getParameter("Amount");
                    amount = Double.parseDouble(strAmount);
    
                    if (amount <= 0.00)
                    {
                        
                    
                        out.println("<h2>Error: The amount is either null or a minus</h2>");
                    }
                    else 
                    {
                        accBalance = accBalance - amount;
                        out.println("<br><center>Balance:" + myFormat.format(accBalance) + " </center> <br>");
                    }
                    }
                    
                                catch(NumberFormatException e)
                                {
                                 out.println("<font color=\"red\"><h2>Error :The amount entered is either null or invalid</h2></font>");   
                                }
                    
                    
                }
                else if (action.equals("Balance")) 
                {
                    out.println("<br><center>Balance:" + myFormat.format(accBalance) + " </center> <br>");
                } else
                {
                    out.println("<br><center>Balance:" + myFormat.format(accBalance) + " </center> <br>");
                }
            }
            else 
            {
                out.println("<br><center>Balance:" + myFormat.format(accBalance) + " </center> <br>");
            }
    
            //Get the current session and set Attribute
            HttpSession session = req.getSession(true);
            session.setAttribute("accBalance", new Double(accBalance));
    
            //Outputs rest of HTML
            out.println("<table width=\"35%\" align=\"center\">"
                    + "<tr><td width=\"33%\" align=\"center\">"
                    + "<input type=\"submit\" name=\"act\" value=\"Deposit\">"
                    + "</td>"
                    + "<td width=\"33%\" align=\"center\">"
                    + "<input type=\"submit\" name=\"act\" value=\"Withdraw\">"
                    + "</td>"
                    + "<td width=\"33%\" align=\"center\">"
                    + "<input type=\"submit\" name=\"act\" value=\"Balance\">"
                    + "</td></tr>"
                    + "</table><br>"
                    + "</form>"
                    + "<hr color=\"#80800\">"
                    + "</body></html>");
    
        }
    }
  • r035198x
    MVP
    • Sep 2006
    • 13225

    #2
    Start by pulling out all the wihtdraw logic into a separate method (class even) that is called from your servlet's doPost. The doPost should just retrieve parameters from various context objects and call classes that do the business logic. Also, why are you creating HTML inside the servlet as was done in 1999? Use JSPs or (better) facelets to separate view logic from controller logic.

    Comment

    Working...