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?
ocpjp 6 (86%)
A Phatak
Greenhorn
Joined: Sep 22, 2011
Posts: 23
posted
0
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
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.