From: Filip P. <pi...@pu...> - 2010-01-18 23:52:11
|
Hi, To my understanding, your program will not terminate until join() gets called on t1, t2, and t3. The question is then, whether join() gets called before the t[i] thread completes (thereby causing MainThread to block), or after t[i] completes (thereby causing RVMThread.join() to return immediately). You're absolutely right that if t[i] has already terminated, its thread ID's (as in the system's TID, the C library's pthread_t, and RVM's threadSlot) will have likely been relinquished. That's just the nature of the beast; there's nothing you can do about it. I am confused about your question though - *every* call to Thread.join() should result in a call to RVMThread.join(). Thread.join() always calls VMThread.join(), which always calls RVMThread.join(). There is no other path that the code could ever take. If you want to store info about a thread so that RVMThread.join() sees it, you should be able to do that just fine - just put it into the RVMThread class as an instance field. -Filip On 1/18/2010 6:42 PM, Xinwei Xie wrote: > Hi all, > I've got such question about join problem in RVMThread. > > MainThread creates 3 threads: t1, t2, t3 and delegates some task to them to > process. Then MainThread calls > for(int i=0; i<3; i++) > t[i].join(); > > The question is, it seems that t[i] may terminate before MainThread calls > t[i]'s join as t[i] finishes its task earlier. In this case, MainThread > won't *actually* call RVMThread#join, will it? If I want to retrieve some > information such as its tid and print out at the time of MainThread calls > t[i]'s join, more specifically, I put my own method in RVMThread#join, how > can I do that. I observe that RVMThread#join won't be called with respective > to the *dead* thread. Therefore the *dead* thread's information is kind of > missing. > > Is there anyone who is familiar with this issue can answer. Thanks a > million! > > Regards, > Xinwei > |