Hi,
1, My servlet is not in the singleThread mode.

2, The db.insert(or db.upgrade) are external class which handle the database
access. it is a separated class, I wrote a test case for it and they all working
fine.

3. I isolated assignNum() method from the servlet into a standard class. Then I
created a test program to generated 50 threads which each of them is gonna to
call the assingNum() method. At first I didn't apply the static to the method.
It turned out that all the threads return the same number after calling the
assignNum(). After I added the static, all threads return unique number which is
what I wanted.

Because of the complexity of the database access code, I didn't post the code.
Here is the test code to create multiple threads to call the assignNum() method:

public class MultipleThreadsTest {
    public static void main (String[] args) {
        for (int i = 0; i < 50; i++){
            new SimpleThread(String.valueOf(i)).start();
        }
    }
}

public class SimpleThread extends Thread {
    public SimpleThread(String str) {
        super(str);
    }

    public void run() {
        for (int i = 0; i < 50; i++) {
      Number numberObj = new Number();
      System.out.println(Number.assignNum("test", "1111", "TT", "cmt none"));
        try {
           sleep((long)(Math.random() * 1000));
        } catch (InterruptedException e) {}
    }
        System.out.println("DONE! " + getName());
    }

}

public class Number{
    public  static synchronized String assignNum(String name, String uID,
                                                      String requestType, String
comment){
     String rID = "";
         //DBaccess is the database access class. It used Oracle SID to make the
connection and insert, update the table.
       DBaccess db = new DBaccess();
     rID = db.DBinsert(name, uID, requestType, comment);
     db.updateSeqNum(requestType);
     return rID;
    }
}


Thanks for all the replies.

Tiana

On Thu, 5 Oct 2000 11:48:45 -0500, Milt Epstein <[EMAIL PROTECTED]> wrote:

>On Thu, 5 Oct 2000, Tiana Zhang wrote:
>
>> The reason I think I have to put static keyword for the method is
>> because my method is going to update the database by JDBC
>> connection. I don't want multiple thread updating the database at
>> the same time.
>
>static should have nothing to do with this.  static just controls
>whether something is a class variable/method or an instance
>variable/method.  (If you don't understand the difference, you should
>get a basic Java book.)
>
>
>> Here is my code:
>>
>> public static synchronized String assignNum(String name, String uID, String
>> requestType, String comment){
>>
>>     String rID = "";
>>     try{
>>         rID = db.DBinsert(name, uID, requestType, comment);
>>         db.updateSeqNum(requestType);
>>
>>     } catch (Exception e) {
>>         System.err.println(e.toString());
>>     }
>>     return rID;
>> }
>
>There's lots of information missing here.  Like what is db?  What do
>its methods do?  How is assignNum called?  And do you have your
>servlet implementing SingleThreadModel?  There may be other relevant
>considerations as well.
>
>Milt Epstein
>Research Programmer
>Software/Systems Development Group
>Computing and Communications Services Office (CCSO)
>University of Illinois at Urbana-Champaign (UIUC)
>[EMAIL PROTECTED]

___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".

Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

Reply via email to