In the code below the compiler suggested me to use Thread.sleep (the static reference ) not this.sleep, why is that?
public class CThreadUsingThread extends Thread{
public void run(){
for (int i = 0; i < 10; i++) {
System.out.println("Thread running:"+i);
try {
// Why Thread.sleep(Math.round(Math.random()*1000)); is preferred?
this.sleep(Math.round(Math.random()*1000));
} catch (InterruptedException e) {
System.err.println("Thread interrupted!");
}
}
}
public static void main(String [] orgs){
CThreadUsingThread thread = new CThreadUsingThread();
thread.start();
}
}


Your code is misleading, basically. It looks like you're referring to a specific thread, when actually it's just calling the static Thread.sleep method which always refers to the currently executing thread.
In this particular case it's not hugely misleading, but it's still not nice. Consider this rather worse case though:
CThreadUsingThread thread = new CThreadUsingThread();
thread.start();
thread.sleep(1000);
Which thread does it look like that will send to sleep? And which thread is it actually going to send to sleep?
As an aside, I'd also:
C prefix for classes; CThreadUsingThread isn't a conventional Java nameRunnable and passing that to the Thread constructor, rather than subclassing Thread directly. It's a cleaner separation of code which is explicitly about threading and code which is just giving the thread some code to run.
See more on this question at Stackoverflow