Basically sendRequest() invokes a thread which calls runOnUiThread with a new Runnable() which in turn also invokes a new Thread(). It is this latter thread which I need to wait for to finish. I thought of using the join() method to force thread completion prior to continuation at a specific spot but I am somewhat new to thread programming and I am not entirely sure about how to set things up. Will give it another go...
Thanks for your help, JG 2012/2/9 John Goche <[email protected]>: > 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

