Thanks Kostya! I have traced the code with the debugger and found that even though notify() is being called from within a thread instantiated from sendRequest() (which is not the same thread as sendRequest()'s thread), the notify() is being called before the wait().
I am assuming that if I call notify() before wait() the notification gets lost? If this is not so, someone please let me know. The problem I am having is that sendRequest() launches a new thead s, and I need to be sure thread s completes before the code proceeds past what I have marked with wait(). Any ideas on how to solve this synchronization problem? Thanks, John Goche 2012/2/9 Kostya Vasilyev <[email protected]>: > Are you calling notify() from inside sendRequest()? > > > If so, it's the same thread, and notify has nothing to do. > > http://developer.android.com/reference/java/lang/Object.html#notify() > > Causes a thread which is waiting on this object's monitor (by means of > calling one of the wait() methods) to be woken up > > > From looking at the code you posted, there is no thread waiting on the lock > because you only have one worker thread, and when it's calling notify it's, > well, calling notify and not waiting on a wait(). > > > For debugging, set a breakpoint at lock.notify, and use the DDMS thread > monitor or the debugger window to examine your threads. > > > You might want to look at this package, which provides higher-level > concurrency classes, and try to find one that fits what you're trying to do: > > http://developer.android.com/reference/java/util/concurrent/package-summary.html > > ( ThreadPoolExecutor? BlockingQueue? ) > > -- Kostya > > 10 февраля 2012 г. 0:41 пользователь John Goche <[email protected]> > написал: >> >> Dear Android developers, >> >> I am having the following issue in Android: >> >> In one class I am having: >> >> -------------------------------------------- >> >> final Object lock = new Object(); >> >> Thread thread; >> >> @Override >> public void onCreate(Bundle savedInstanceState) { >> >> super.onCreate(savedInstanceState); >> >> thread = new Thread() { >> >> @Override >> public void run() { >> >> sendRequest("foo"); >> >> synchronized(lock) { >> >> try { lock.wait(); } catch (InterruptedException e) { >> e.printStackTrace(); } >> >> } >> >> System.out.println("GOT HERE!!!"); >> >> ------------------------ >> >> which causes the sendRequest() to do a bunch of stuff. When such stuff >> finishes I call: >> >> System.out.println("Notifying thread..."); >> synchronized(lock) { >> lock.notify(); >> } >> System.out.println("Thread notified."); >> >> ------------------------- >> >> and this code executed until the "Thread notified." println() >> statement. But then I do >> not see the waiting thread resume from where I called wait(). Here is the >> output >> from adb logcat: >> >> I/System.out( 2395): Thread notified. >> W/ActivityManager( 60): Launch timeout has expired, giving up wake lock! >> >> I do not see where I am going wrong. Any ideas why the code is not >> working as expected? >> >> Thanks, >> >> John Goche >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to [email protected] >> To unsubscribe from this group, send email to >> [email protected] >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en > > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

