Java线程休眠

线程休眠

线程休眠:Thread.sleep();

  • sleep(时间)指当前线程阻塞的毫秒数; (1000毫秒 = 1秒)
  • sleep存在异常InterruptedException;
  • sleep时间达到后线程进入就绪状态;
  • sleep可以模拟网络延时,倒计时等;
  • 每一个对象都有一个锁,sleep不会释放锁。

sleep():模拟网络延时最大的作用:放大问题的发生性

public class SleepTest implements Runnable{

    private int number = 10; // 票数
    
    @Override
    public void run() {

        while (true){

            if (number <= 0) {
                break;
            }

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"抢了票"+number--);
        }
    }

    public static void main(String[] args) {
        
        SleepTest sleepTest = new SleepTest();
        new Thread(sleepTest , "淼淼").start();
        new Thread(sleepTest , "云疏").start();
        new Thread(sleepTest , "若瑄").start();
    }
}

Java线程休眠_第1张图片

总结:可以看到里面有重复的票和-1这张票,这就是sleep()的作用放大问题的发生性。

模拟倒计时

public class Sleep2 {

    public static void tenDown() throws InterruptedException {

        int time = 10;

        while (true){
            Thread.sleep(1000); // 线程睡眠1秒
            System.out.println(time--);
            if (time < 0) {
                break;
            }
        }
    }

    public static void main(String[] args){

        try {
            tenDown();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

打印当前时间

public class NowTime {
    // 打印当前系统时间
    public static void main(String[] args) {
        Date startTime = new Date(System.currentTimeMillis());//获取系统当前时间

        while(true){
            try {
                Thread.sleep(1000);
                System.out.println(new SimpleDateFormat("HH:mm:ss").format(startTime));
                startTime = new Date(System.currentTimeMillis()); // 更新当前时间
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

你可能感兴趣的:(Java多线程,java)