File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Developer Certification (SCJD/OCMJD) and the fly likes urgent help required on syncronized variable Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Developer Certification (SCJD/OCMJD)
Bookmark "urgent help required on syncronized variable" Watch "urgent help required on syncronized variable" New topic
Author

urgent help required on syncronized variable

Reshma Das
Ranch Hand

Joined: Jan 29, 2002
Posts: 125
Iam going mad on syncronized stmt. i have a code like
class textlock{
public syncronized reserver(){
System.out.println("lock called");
data.lock();
System.out.println("bookcalled");
data.book();
System.out.println("updatememorycalled");
data.updatememory();
System.out.println("unlock called");
data.unlock();
}
} //end of class
Data{
lock(){
syncronized(arraylist){}
}
unlock(){
syncronized(arraylist){}
}
syncronized book() {}
synccronized updatememory(){}
}
then i wrote a seperate class which implements
Runnable interface . in it constructor, it runs a for
loop
for(i=0;i<30..)
testlock.reserver(fltno,tickets);
the output is so horrible. can someone explain why iam
getting non syncronized outputs. all my methods are
syncronized. iam so confused.

output:
lock called
bookSeats called
26 pendingseats= 8 leftoutseats = 7
lock called
bookSeats called
30 pendingseats= 8 leftoutseats = 7
lock called
bookSeats called
31 pendingseats= 8 leftoutseats = 7
lock called
bookSeats called
updateMemory called
1 pendingseats= 7 leftoutseats = 6
lock called
bookSeats called
2 pendingseats= 7 leftoutseats = 6
lock called
bookSeats called
updateMemory called
updateMemory called
3 pendingseats= 7 leftoutseats = 6
lock called
bookSeats called
updateMemory called
4 pendingseats= 7 leftoutseats = 6
Reshma Das
Ranch Hand

Joined: Jan 29, 2002
Posts: 125
i have a doubt my lock() method contains
while(true) {
if vec.contains(recnum)
wait();
else {
add vec.add(recnum);
break;
}
}
if i do this, my current thread releases the lock. a new client gets into lock, the loop continues. there is some deadlock going on. i dont know. iam so confused. can someone mail me some good link for understanding synchronized. iam read many articles but left clueless.
Reshma Das
Ranch Hand

Joined: Jan 29, 2002
Posts: 125
I found that when i add Thread.sleep(1000) within my if loop, the synchronisation works fine. as soon as i remove it , sometimes it works sometimes it fails. i c that the lock method gets called lot of times and since someone is holding the lock, it goes in some infinite waiting loop.
my code is very simple.
This is my lock code:
synchronized void lock()
if(arraylist.contains(new Integer(rec))) {
try {
wait();
} catch(InterruptedException ie) {
}
} else {
arraylist.add(new Integer(recordNum));
}
Iam i missing something? did someone tried load testing ?
Reshma Das
Ranch Hand

Joined: Jan 29, 2002
Posts: 125
Note: Iam running a simple loop which creates threads and invokes my server.bookseats(...).
iam passing the same recordnumber to check for concurrent access. and ima stuck with it.
thanks.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: urgent help required on syncronized variable