• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Synchronizing Session Counter

 
A Phatak
Greenhorn
Posts: 24
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I keep having some trouble understanding synchronizing concept in the context of static vs nonstatic. For e.g. take a look at the code below:


It is a simple listener that counts number of active sessions. However, we know HttpSession object is not thread safe. So I believe that "counter" variable should be incremented in a "synchronized" manner.

It is clear that getCounter() should change to public synchronized static int getSessionCounter()

My question is what changes should be implemented in sessionDestroyed() and sessionCreated() methods? Which of the following is correct?



OR




Or does it have to be synchronized at all?
 
A Phatak
Greenhorn
Posts: 24
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Sorry if this is a wrong place for this question? I am studying for the OCEWCD and thought this is my forum. If not please redirect me appropriately
 
Frits Walraven
Creator of Enthuware JWS+ V6
Saloon Keeper
Pie
Posts: 2533
113
Android Chrome Eclipse IDE
  • Likes 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Phatak

Sorry if this is a wrong place for this question? I am studying for the OCEWCD and thought this is my forum. If not please redirect me appropriately

It is perfectly ok to ask a question regarding threads over here although this topic belongs to the basic concepts of OCPJP you still need to know about it in OCEWCD.

Every object (or instance) has one lock and every class has exactly one lock. Locking on static methods (accessing static data) is usually done on the class, where locking instance methods is mostly done on the instance (this()).

As there is only one listener object per listener declaration in the web-container (the container will instantiate your listener) you can also give the listener a private instance variable holding a counter. So counting the sessions in the listener class instance variable will have the same effect as counting the sessions in a static variable.

So these two implementations will both work:

Locking on the classLocking on this()

Regards,
Frits
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic