- To synchronize threads, the Java programming language uses monitors, which are a high-level mechanism for allowing only one thread at a time to execute a region of code protected by the monitor.
- The behavior of monitors is explained in terms of locks; there is a lock associated with each object.
- The methods
wait
,notify
, andnotifyAll
of classObject
support an efficient transfer of control from one thread to another. wait
until such time as another thread awakens it usingnotify.
- Each thread has a working memory, in which it may keep copies of the values of variables from the main memory that is shared between all threads.
- To access a shared variable, a thread usually first obtains a lock and flushes its working memory. This guarantees that shared values will thereafter be loaded from the shared main memory to the threads working memory.
- When a thread unlocks a lock it guarantees the values it holds in its working memory will be written back to the main memory.
- Every thread has a working memory in which it keeps its own working copy of variables that it must use or assign. As the thread executes a program, it operates on these working copies. The main memory contains the master copy of every variable.
- The main memory also contains locks; there is one lock associated with each object. Threads may compete to acquire a lock.
Nov 29, 2008
Important Points about Threads in Java
Jul 25, 2008
Finalization in Java
protected void finalize() throws Throwable
- It is declared in Object class.
- Is invoked by the garbage collector after it determines that this object is no longer reachable and its space is to be reclaimed.
- finalize is that it is invoked if and when the JavaTM virtual machine has determined that there is no longer any means by which this object can be accessed by any thread that has not yet died, except as a result of an action taken by the finalization of some other object or class which is ready to be finalized.
- Subclasses of Object may override this definition.
- It is guaranteed that the thread that invokes finalize() will not be holding any user-visible synchronization locks when finalize() is invoked.
- Any exception thrown by the
finalize()
causes the finalization of this object to be halted, but is otherwise ignored. - finalize() is invoked at most once per object, even if execution of this method causes the object to become reachable again and later it becomes unreachable again.
Subscribe to:
Posts (Atom)