线程休眠的两个简单应用(模拟买票,倒计时)

  • sleep(时间)指定当前线程阻塞的毫秒数
  • sleep存在异常InterruptedException
  • sleep时间达到后线程进入就绪状态
  • sleep可以模拟网络延时,倒计时等
  • 每一个对象都有一个锁,sleep不会释放锁
    代码:
    模拟买票:
package com.qiu.state;

import com.qiu.demo01.TestThreadDemo04;
//模拟网络延时:放大问题的发生性
public class TestSleep implements Runnable{
    private int ticketsNum = 10;
    @Override
    public void run() {
        while(true){
            if (ticketsNum<=0){
                break;
            }
            //模拟延时
            try {
                Thread.sleep(200);
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"-->拿到了"+ticketsNum--+"票");
        }
    }


    public static void main(String[] args) {
        TestSleep ticket = new TestSleep();

        new Thread(ticket,"黄牛").start();
        new Thread(ticket,"老师").start();
        new Thread(ticket,"我").start();
    }
}

模拟倒计时(模拟系统时间更新)
代码:

package com.qiu.state;

import java.text.SimpleDateFormat;
import java.util.Date;

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

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


    }
    public static void tendown() throws InterruptedException {
        int num = 10;
        while(true){
            Thread.sleep(1000);
            System.out.println(num--);
            if (num<0){
                break;
            }
        }
    }
}

原创文章 32 获赞 52 访问量 632

猜你喜欢

转载自blog.csdn.net/qq_42400763/article/details/105731872
今日推荐