Some important points about sleep method are :
- It causes current executing thread to sleep for specific amount of time.
- Its accuracy depends on system timers and schedulers.
- It keeps the monitors it has acquired, so if it is called from synchronized context, no other thread can enter that block or method.
- If we call interrupt() method , it will wake up the sleeping thread.
1
2
3
4
5
6
|
synchronized(lockedObject) {
Thread.sleep(1000); // It does not release the lock on lockedObject.
// So either after 1000 miliseconds, current thread will wake up, or after we call
//t. interrupt() method.
|
Example: Create a class FirstThread.java as below.
1
2
3
4
5
6
7
8
9
10
11
12
|
package org.arpit.java2blog.thread;
public class FirstThread implements Runnable{
public void run()
{
System.out.println("Thread is running");
}
}
|
Create main class named ThreadSleepExampleMain.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package org.arpit.java2blog.thread;
public class ThreadSleepExampleMain {
public static void main(String args[])
{
FirstThread ft= new FirstThread();
Thread t=new Thread(ft);
t.start();
long startTime=System.currentTimeMillis();
try {
// putting thread on sleep
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
long endTime=System.currentTimeMillis();
long timeDifference=(endTime-startTime);
System.out.println("Time difference between before and after sleep call: "+timeDifference);
}
}
|
When you run above program, you will get following output.
1
2
3
4
|
Thread is running
Time difference between before and after sleep call: 1001
|
You can see there is delay of 1 milliseconds. As mentioned earlier,its accuracy depends on system timers and schedulers.