Java多线程java中的Sleep方法

Posted 13th

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程java中的Sleep方法相关的知识,希望对你有一定的参考价值。

点我跳过黑哥的卑鄙广告行为,进入正文。

 

Java多线程系列更新中~

  正式篇:

  1. Java多线程(一) 什么是线程
  2. Java多线程(二)关于多线程的CPU密集型和IO密集型这件事
  3. Java多线程(三)如何创建线程
  4. Java多线程(四)java中的Sleep方法
  5. Java多线程(五)线程的生命周期

  番外篇(神TM番外篇):

  1. Java 过一下基础
  2. 转载:java中Thread.sleep()函数使用
  3. Java多线程 Socket使用

 

 

Thread类为睡眠线程提供了两种方法:

  1. public static void sleep(long miliseconds)抛出InterruptedException
  2. 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方法的主要内容,如果未能解决你的问题,请参考以下文章

java多线程中sleep和wait的4个区别,你知道几个

java多线程怎样让一个线程睡眠

Java多线程研究03-线程的基本操作(notify,notifyAll,interrupt,join,sleep)

Java多线程 -- 线程的生命周期和状态什么是上下文切换线程死锁避免死锁 sleep() 方法和 wait() 方法的区别和共同点为什么调用 start() 方法会执行 run() 方法

Java多线程中joinyieldsleep方法详解

java多线程-Thread的sleep方法