I'm not a threading guru myself but this conversation brought to mind
something I read in chapter 14 of
Bruce Eckel's "Thinking in Java" 2nd Edition.
It's a footnote:
"Runnable was in Java.1.0, while inner classes were not introduced until Java 1.1, which may partially account for the existence of Runnable. Also, traditional multithreading architectures focused on a function to be run rather than an object. My preference is always to inherit from Thread if I can; it seems cleaner and more flexible to me."
Most opinions that I read seem to prefer implementing Runnable.
[ February 23, 2005: Message edited by: Ben Souther ]