commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oliver Zeigermann <oliver.zeigerm...@gmail.com>
Subject Re: Transaction API, ReadWriteLock
Date Wed, 06 Jul 2005 13:38:42 GMT
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


Mime
View raw message