0
点赞
收藏
分享

微信扫一扫

线程休眠、线程休眠应用场景

幺幺零 2022-02-13 阅读 68

线程休眠、线程休眠应用场景

线程休眠sleep

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

线程休眠的作用

模拟网络延时:放大问题的发生性

package testthread;

//sleep模拟网络延时:放大问题的发生性,模拟抢票的并发问题
public class TestSleep implements Runnable {

    //票数
    private Integer ticketNums = 10;

    @Override
    public void run() {
        while (true) {
            if (ticketNums <= 0) {
                break;
            }
            //模拟延时
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "抢到了第" + ticketNums-- + "张票");
        }
    }

    public static void main(String[] args) {
        TestSleep testSleep = new TestSleep();
        new Thread(testSleep, "小红").start();
        new Thread(testSleep, "小明").start();
        new Thread(testSleep, "黄牛").start();
        
        /*
        输出:
        小明抢到了第10张票
        黄牛抢到了第9张票
        小红抢到了第10张票
        黄牛抢到了第8张票
        小红抢到了第8张票
        小明抢到了第7张票
        黄牛抢到了第6张票
        小明抢到了第4张票
        小红抢到了第5张票
        小红抢到了第3张票
        黄牛抢到了第3张票
        小明抢到了第3张票
        黄牛抢到了第2张票
        小红抢到了第2张票
        小明抢到了第2张票
        小明抢到了第1张票
        黄牛抢到了第1张票
        小红抢到了第1张票
         */
    }
}

模拟倒计时

有超经典的一个段子,就是说老板要输出一天后的当前时间,然后代码里用sleep方法线程休眠了整整24小时然后输出的。
在这里插入图片描述

package testthread;

//sleep模拟倒计时:
public class TestSleep2 {

    public static void main(String[] args) throws InterruptedException {
        int countDown = 10;
        while (true) {
            Thread.sleep(1000);
            System.out.println(countDown--);
            if (countDown <= 0) {
                break;
            }
        }
    }
}
举报

相关推荐

0 条评论