Java concurrency package: Difference between revisions

From Citizendium
Jump to navigation Jump to search
imported>Prn Dan Mo
imported>Prn Dan Mo
Line 55: Line 55:
“Once a thread attempts to enter a synchronized block, it will hang until the lock is available.”
“Once a thread attempts to enter a synchronized block, it will hang until the lock is available.”
<ref name="Problems with Java 1.4 synchronization model">
<ref name="Problems with Java 1.4 synchronization model">
{{cite web|
url= http://www.javamex.com/tutorials/synchronization_concurrency_5.shtml|
title=Problems with Java 1.4 synchronization model|
accessdate=2010-08-12 |
author=Unknown| }}
</ref> which causes low performance because all other threads that need the same object have to wait.
Another issue is that missing appropriate notifications such as notify() or notifyAll() while
programming probably results in deadlock. <ref name="A Critique of Java for Concurrent Programming">
{{cite journal
{{cite journal
   | last = V.K.
   | last = V.K.
Line 69: Line 77:
   | id =
   | id =
   | accessdate = 2010-08-12}}
   | accessdate = 2010-08-12}}
</ref> which causes low performance because all other threads that need the same object have to wait.
</ref>
Another issue is that missing appropriate notifications such as notify() or notifyAll() while
programming probably results in deadlock. [4]


==Links==
==Links==

Revision as of 13:28, 12 August 2010

All unapproved Citizendium articles may contain errors of fact, bias, grammar etc. A version of an article is unapproved unless it is marked as citable with a dedicated green template at the top of the page, as in this version of the 'Biology' article. Citable articles are intended to be of reasonably high quality. The participants in the Citizendium project make no representations about the reliability of Citizendium articles or, generally, their suitability for any purpose.

Nuvola apps kbounce green.png
Nuvola apps kbounce green.png
This article is currently being developed as part of an Eduzendium student project. The course homepage can be found at CZ:Special_Topics_2010.
To provide students with experience in collaboration, you are warmly invited to join in here, or to leave comments on the discussion page. The anticipated date of course completion is 13 August 2010. One month after that date at the latest, this notice shall be removed.
Besides, many other Citizendium articles welcome your collaboration!


This article is developing and not approved.
Main Article
Discussion
Related Articles  [?]
Bibliography  [?]
External Links  [?]
Citable Version  [?]
 
This editable Main Article is under development and subject to a disclaimer.


The Java concurrency package is a library supporting threading and parallel programming in the Java programming language.

Synchronizers

Mutilthread Synchronization before Java 5

Before Java 5, multithreads are supported using the lock mechanism for synchronization. Locks are implemented in Synchronized method. This mechanism “ensures that only one Java thread can execute an object's synchronized methods at a time” and “also allows threads to wait for resources to become available, and allows the thread that makes resources available to notify other threads that are waiting for the resources”. [1]. When the synchronized keyword is used, the thread which invokes the synchronized method must obtain a lock for the object which makes this thread the lock holder. The rule of thumb of synchronized method is that only one thread can hold this lock at a time.

Three most commonly used methods including, wait(), notify(), and notifyAll() are used for resource communication between threads.

“The wait() method can only be invoked by the object's lock holder. It causes current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object” [2].

The notify() method wakes up one thread and only the notified thread can go ahead and do something. If there are more than one thread waiting on this object’s waiting queue, one of them is selected to be woke up. notify() wakes up the first thread in the waiting queue.

The notifyAll() method wakes up all threads in the wait set. notifyAll() is normally used when there are many threads to wake up simultaneously. Which thread gets the right to go ahead to execute depends upon thread property such as their priority.

One of the biggest issues of synchronized method is that it is an “all-or-nothing thing” [3]. “Once a thread attempts to enter a synchronized block, it will hang until the lock is available.” [3] which causes low performance because all other threads that need the same object have to wait. Another issue is that missing appropriate notifications such as notify() or notifyAll() while programming probably results in deadlock. [4]

Links

Java Concurrency in Practice

Lesson: Concurrency

Java Technology

References

  1. Gary Shute. Java Synchronization. Retrieved on 2010-08-12.
  2. J2SE API v1.4.2. Retrieved on 2010-08-12.
  3. 3.0 3.1 Unknown. Problems with Java 1.4 synchronization model. Retrieved on 2010-08-12.
  4. V.K., Garg (September 2005). "A Critique of Java for Concurrent Programming". IEEE Computer Society 6 (9). Retrieved on 2010-08-12. [e]