Thread 类为睡眠线程提供了两种方法:
public static void sleep(long miliseconds)抛出 InterruptedException
public static void sleep(long miliseconds,int nanos)抛出 InterruptedException
参数声明:
miliseconds - 以毫秒为单位的睡眠时间.
nanos - 这是 0-999999 额外纳秒的睡眠时间.
用法示例
1. 不睡眠的情况
- public class Multi extends Thread{
- public void run() {
- for(int i=1; i<1000; i++) {
- //try {
- // Thread.sleep(500);
- //}catch (InterruptedException e) {
- // e.printStackTrace();
- //}
- System.out.println(i);
- }
- }
- public static void main(String[] args) {
- Multi t1 = new Multi();
- Multi t2 = new Multi();
- t1.start();
- t2.start();
- }
- }
输出情况(每台计算机不一样, 每次运行也会不一样, 我截取部分数据分析)
- t1: 1,2,3,4,5,6,7,8,9,10
- t2: 1,2,3,4,5,6,7,8
- t1: 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
- ......
可以看出, 这两个线程的确是交替执行的. JAVA 采用抢占式线程调度, 也就是每个线程由系统来分配时间, 线程的切换并不由线程本身决定.
2. 线程睡眠的情况
- public class Multi extends Thread{
- public void run() {
- for(int i=1; i<1000; i++) {
- try {
- Thread.sleep(500);
- }catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println(i);
- }
- }
- public static void main(String[] args) {
- Multi t1 = new Multi();
- Multi t2 = new Multi();
- t1.start();
- t2.start();
- }
- }
这个输出就是严格的一个一次的交替原则.
- t1: 1
- t2: 1
- t1: 2
- t2: 2
- t1: 3
- ......
这是因为 Sleep()使得当前线程进入阻塞状态, 系统便调用了另一线程, 循环往复, 便出现了上面的输出结果. 那么, 什么情况阻塞, 只有 Sleep 吗? 这就引出了线程的生命周期.
Java 多线程(四)java 中的 Sleep 方法
来源: http://www.bubuko.com/infodetail-2869892.html