commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aaron Hamid <ar...@cornell.edu>
Subject Re: Transaction API, ReadWriteLock
Date Wed, 06 Jul 2005 13:56:47 GMT
Is this true?  It was my impression, have first written such a class, and then finding and
skimming the javadoc for [ReadWrite]LockManager, and particularly 'getLock' and 'createLock',
that lock singletons would be automatically created and managed.  Otherwise the developer
must write a lot of boilerplate code for keeping a singleton map of locks.  Surely only the
'resourceId' must be the same, and not the actual ReadWriteLock reference?

LockManager: "Encapsulates creation, removal, and retrieval of locks. Each resource can have
at most a single lock."

Aaron

Oliver Zeigermann wrote:
> Ooops, sorry, you are right. Not only the resource Id, but the lock
> *itself* must be the same in both threads.
> 
> Doing it this way:
> 
> 		final ReadWriteLock fileLock = new ReadWriteLock("Huhu", loggerFacade);
> 		Runnable run = new Runnable() {
> 
> 			public void run() {
> 
> 				try {
> 					System.out.println("before acquiring a lock "
> 							+ Thread.currentThread());
> 					boolean result = fileLock.acquireWrite(Thread
> 							.currentThread(), Long.MAX_VALUE);
> 					System.out.println("lock result: " + result + " "
> 							+ Thread.currentThread());
> 					Thread.sleep(20000);
> 					System.out.println("after sleeping "
> 							+ Thread.currentThread());
> 				} catch (InterruptedException e) {
> 					e.printStackTrace(System.err);
> 
> 				} finally {
> 					fileLock.release(Thread.currentThread());
> 				}
> 			}
> 
> 		};
> 
> 		Thread t1 = new Thread(run, "Thread1");
> 		Thread t2 = new Thread(run, "Thread2");
> 		t1.start();
> 		try {
> 			Thread.sleep(1000);
> 		} catch (InterruptedException e) {
> 		}
> 		t2.start();
> 
> 
> works fine for me.
> 
> HTH
> 
> Oliver
> 
> On 7/6/05, LeRoy.Yanta@securian.com <LeRoy.Yanta@securian.com> wrote:
> 
>>
>>
>>
>>
>>Oliver,
>>
>>I tried your suggestion by changing my ReadWriteLock statement to
>>
>>ReadWriteLock fileLock = new ReadWriteLock("c:/logRec.txt",loggerFacade);
>>
>>However, I received the same results as when I used new File(..).
>>
>>LeRoy
>>
>>
>>
>>
>>
>>
>>             Oliver Zeigermann
>>             <oliver.zeigerman
>>             n@gmail.com>                                               To
>>                                       Jakarta Commons Users List
>>             07/06/2005 01:44          <commons-user@jakarta.apache.org>
>>             AM                                                         cc
>>
>>                                                                   Subject
>>             Please respond to         Re: Transaction API, ReadWriteLock
>>             "Jakarta Commons
>>                Users List"
>>             <commons-user@jak
>>             arta.apache.org>
>>
>>
>>
>>
>>
>>
>>Most likely your problem ist that new File(..) creates different
>>objects in each thread. I would try using something like the path to
>>the file as String.
>>
>>Oliver
>>
>>On 7/5/05, LeRoy.Yanta@securian.com <LeRoy.Yanta@securian.com> wrote:
>>
>>>
>>>
>>>
>>>I'm trying to use the ReadWriteLock class to acquire a write lock on a
>>
>>file
>>
>>>in a servlet.  When I generate multiple threads of the servlet using a
>>
>>WTE
>>
>>>5.1 server in the WSAD 5.1 IDE, I'm not able to get ReadWriteLock to
>>
>>block
>>
>>>other servlet threads after the first servlet thread obtains the lock.
>>
>>I'm
>>
>>>using two IE browser windows to generate the two servlet threads.  Below
>>
>>is
>>
>>>ReadWriteLock code I have in the servlet followed by the
>>
>>System.out.println
>>
>>>statements that are generated in the server log file during my test.
>>>
>>>ReadWriteLock fileLock = new ReadWriteLock(new File(c:/logRec.txt,
>>>loggerFacade);
>>>try {
>>>      System.out.println("before acquiring a lock " +
>>>Thread.currentThread());
>>>      boolean result =
>>>fileLock.acquireWrite(Thread.currentThread(),Long.MAX_VALUE);
>>>      System.out.println("lock result: " + result + " " +
>>>Thread.currentThread());
>>>      Thread.sleep(20000);
>>>      System.out.println("after sleeping " + Thread.currentThread());
>>>      FileWriter recFile = new FileWriter(c:/logRec.txt, true);
>>>      recFile.write("text from testFileTran");
>>>      recFile.close();
>>>} catch (InterruptedException e) {
>>>      e.printStackTrace(System.err);
>>>
>>>} catch (IOException e) {
>>>      e.printStackTrace(System.err);
>>>
>>>} finally {
>>>      fileLock.release(Thread.currentThread());
>>>}
>>>
>>>[7/5/05 8:26:03:326 CDT]  7c1477e SystemOut     O before acquiring a lock
>>>Thread[Servlet.Engine.Transports : 0,5,main]
>>>[7/5/05 8:26:03:326 CDT]  7c1477e SystemOut     O lock result: true
>>>Thread[Servlet.Engine.Transports : 0,5,main]
>>>[7/5/05 8:26:08:384 CDT] 24c3477d SystemOut     O before acquiring a lock
>>>Thread[Servlet.Engine.Transports : 1,5,main]
>>>[7/5/05 8:26:08:384 CDT] 24c3477d SystemOut     O lock result: true
>>>Thread[Servlet.Engine.Transports : 1,5,main]
>>>[7/5/05 8:26:23:335 CDT]  7c1477e SystemOut     O after sleeping
>>>Thread[Servlet.Engine.Transports : 0,5,main]
>>>[7/5/05 8:26:28:382 CDT] 24c3477d SystemOut     O after sleeping
>>>Thread[Servlet.Engine.Transports : 1,5,main]
>>>
>>>
>>>>From reviewing the Transaction documentation and mailing list archives,
>>
>>I'm
>>
>>>not able to determine what I'm doing wrong.
>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
>>>For additional commands, e-mail: commons-user-help@jakarta.apache.org
>>>
>>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: commons-user-help@jakarta.apache.org
>>
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail: commons-user-help@jakarta.apache.org
>>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message