I have four declarations of Thread.sleep(...) below. Each of the declarations is marked with that Line #1 to #6. My question is which declarations put which threads to pause?
class Runa extends Thread{
public void run(){
try{
// Line #1
Thread.sleep(500);
//Line #2
this.sleep(500);
}catch(Exception e) {}
}
}
class Runb implements Runnable {
Thread t;
Runb() {
t = new Thread(this);
t.start();
try{
//Line #3
Thread.sleep(500);
}catch(Exception e){ }
}
@Override
public void run() {
try {
do {
// Line #4
Thread.sleep(2000);
// Line #5
// t.sleep(500);
count++;
} while (count < 10);
} catch (InterruptedException e) {
}
}
}
public class thread2Runnable2 {
public static void main(String args[]) {
Runa rua = new Runa();
rua.start();
//Line #6
rua.sleep(500);
Runb runb = new Runb();
}
}
These are my assumptions:
Line #1 pause Runa thread
Line #2 pause Runa thread
Line #3 pause the main thread
Line #4 pause t thread
Line #5 pause t thread
Line #6 pause the main thread
Are my assumptions correct?
The Thread#sleep(long)
method is a static method which:
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.
The currently executing thread is the thread which invoked the method. So whichever thread invokes sleep
is the one which sleeps. As far as I can tell, your assumptions appear correct.