<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1640" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=526300623-07112009><FONT face="Courier New" color=#0000ff 
size=2>The term non-blocking here (BlockingQueue.put) is being used in 
a&nbsp;different sense to that of the non-blocking/wait-free/lock-free 
algorithms. </FONT></SPAN><SPAN class=526300623-07112009><FONT 
face="Courier New" color=#0000ff size=2>It is an unfortunate terminology clash 
but the lock-free/wait-free/non-blocking terminology is only considering 
mutual-exclusion/atomicity related blocking (for want of a better 
term).</FONT></SPAN></DIV>
<DIV><SPAN class=526300623-07112009><FONT face="Courier New" color=#0000ff 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=526300623-07112009><FONT face="Courier New" color=#0000ff 
size=2>In general any method that has to wait for a state-related condition to 
hold (space in buffer, item in buffer, data on socket, time-X-has-elapsed) is a 
blocking method, and any method that doesn't have to wait is a non-blocking 
method. And this is independent of whether locking is also 
involved.</FONT></SPAN></DIV>
<DIV><SPAN class=526300623-07112009><FONT face="Courier New" color=#0000ff 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=526300623-07112009><FONT face="Courier New" color=#0000ff 
size=2>David</FONT></SPAN></DIV>
<BLOCKQUOTE dir=ltr 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader dir=ltr align=left><FONT face=Tahoma 
  size=2>-----Original Message-----<BR><B>From:</B> 
  concurrency-interest-bounces@cs.oswego.edu 
  [mailto:concurrency-interest-bounces@cs.oswego.edu]<B>On Behalf Of </B>Joe 
  Bowbeer<BR><B>Sent:</B> Sunday, 8 November 2009 9:01 AM<BR><B>To:</B> 
  concurrency-interest@cs.oswego.edu<BR><B>Subject:</B> Re: 
  [concurrency-interest] PriorityBlockingQueue put() 
  operation<BR><BR></FONT></DIV>On Sat, Nov 7, 2009 at 12:01 PM, Michael Spiegel 
  wrote:<BR>
  <DIV class=gmail_quote>
  <BLOCKQUOTE class=gmail_quote 
  style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">Hi,<BR><BR>I 
    apologize if this question has been answered before of if the answer<BR>is 
    trivially obvious. &nbsp;The documentation 
    for<BR>java.util.concurrent.PriorityBlockingQueue states that the put(E 
    e)<BR>method will never block, and such claims are not made about the 
    add(E<BR>e) method. &nbsp;The method bodies for both methods are identical, 
    ignoring<BR>the fact that one method returns boolean and the other doesn't 
    return<BR>a value. &nbsp;The methods body is an invocation to the offer(E e) 
    method.<BR>I believe that offer() is a blocking method, since it locks 
    the<BR>ReentrantLock around the data structure. &nbsp;So is put() a 
    blocking<BR>method? I must be missing something 
    obvious.<BR><BR>Thanks!<BR>--Michael<BR></BLOCKQUOTE>
  <DIV><BR><BR>Wikipedia currently makes this distinction:<BR><BR>&nbsp; "In 
  computer science, non-blocking synchronization ensures that threads competing 
  for a shared resource do not have their execution indefinitely postponed by 
  mutual exclusion. A non-blocking algorithm is lock-free if there is guaranteed 
  system-wide progress; wait-free if there is also guaranteed per-thread 
  progress."<BR><BR>&nbsp; <A 
  href="http://en.wikipedia.org/wiki/Non-blocking_synchronization">http://en.wikipedia.org/wiki/Non-blocking_synchronization</A><BR><BR>So 
  non-blocking &lt; lock-free &lt; wait-free ?<BR><BR>Consider old (blocking) <A 
  href="http://java.io">java.io</A> and the newer asynchronous java.nio.&nbsp; 
  They both use locks of some sort, but nio is non-blocking.<BR><BR>Object.wait 
  is typically a good indicator of&nbsp; blocking.&nbsp; (As is throws 
  IE.)<BR><BR>--Joe<BR><BR></DIV></DIV></BLOCKQUOTE></BODY></HTML>