--- a
+++ b/incubator/concurrent/concurrent_lock.rex
@@ -0,0 +1,85 @@
+#!/usr/bin/rexx
+/*----------------------------------------------------------------------------*/
+/*                                                                            */
+/* Copyright (c) 2011 Rexx Language Association. All rights reserved.         */
+/*                                                                            */
+/* This program and the accompanying materials are made available under       */
+/* the terms of the Common Public License v1.0 which accompanies this         */
+/* distribution. A copy is also available at the following address:           */
+/* http://www.oorexx.org/license.html                                         */
+/*                                                                            */
+/* Redistribution and use in source and binary forms, with or                 */
+/* without modification, are permitted provided that the following            */
+/* conditions are met:                                                        */
+/*                                                                            */
+/* Redistributions of source code must retain the above copyright             */
+/* notice, this list of conditions and the following disclaimer.              */
+/* Redistributions in binary form must reproduce the above copyright          */
+/* notice, this list of conditions and the following disclaimer in            */
+/* the documentation and/or other materials provided with the distribution.   */
+/*                                                                            */
+/* Neither the name of Rexx Language Association nor the names                */
+/* of its contributors may be used to endorse or promote products             */
+/* derived from this software without specific prior written permission.      */
+/*                                                                            */
+/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS        */
+/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT          */
+/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS          */
+/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT   */
+/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,      */
+/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED   */
+/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,        */
+/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY     */
+/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING    */
+/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS         */
+/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.               */
+/*                                                                            */
+/*----------------------------------------------------------------------------*/
+
+/**
+ * Sample program to demonstrate concurrent lock utilitites.
+ * Moritz Hoffmann - 110326
+ **/
+import(.org.oorexx.concurrent.Lock)
+
+lock = .Lock~new
+
+thread1 = .MyThread~new(lock, "1")
+thread2 = .MyThread~new(lock, "2")
+
+thread1~start
+thread2~start
+say "waiting for thread termination..."
+thread1~join
+thread2~join
+
+::options trace o
+
+::routine import
+  use strict arg class
+  dotPos = class~id~lastpos(".")
+  .context~package~addClass(class~id~substr(dotPos+1,class~id~length), class)
+  return ""
+::class MyThread subclass org.oorexx.concurrent.Thread
+::method init
+  expose lock
+  use strict arg lock, ...
+  forward class (super) arguments (arg(2,"a"))
+
+::method process
+  expose lock
+  do 10
+    lock~process(.message~new(self,"critical"))
+  end
+
+::method critical
+  expose lock
+  call charout ,"MyThread" self~name
+  call SysSleep random()/1000
+  lock~process(.message~new(self, "critical2"))
+  say "...|"
+::method critical2
+  call charout , "|..."self~name
+
+::requires "concurrent.cls"
+