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

线程休眠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;
            }
        }
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值