Java基础学习:多线程12(线程休眠:sleep )

Java基础学习:多线程12

  • 线程休眠:sleep

    • sleep(时间)指定当前线程阻塞的毫秒数;

    • sleep存在异常InterruptedException;

    • sleep时间达到后线程进入就绪状态;

    • sleep可以模拟网络延时,倒计时等;

    • 每个对象都有一个锁,sleep不会释放锁;

 

  • 代码案例:模拟网络延时:作用:放大问题的发生性


    /**
    * 模拟网络延时:放大问题的发生性;
    *
    * 多个线程共享一个对象;不安全
    */
    public class TestSleep implements Runnable {

       //票数
       private int ticketNums=10;

       //重写run()方法:
       @Override
       public void run() {
           //线程体:取票
           while(true){
               if(ticketNums<=0){
                   break;//退出循环
              }
               try {
                   Thread.sleep(500);//模拟延时
              } catch (InterruptedException e) {
                   e.printStackTrace();
              }
               System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"票");
          }

      }

       //主线程
       public static void main(String[] args) {

           TestSleep t1=new TestSleep();

           new Thread(t1,"小明").start();
           new Thread(t1,"老师").start();
           new Thread(t1,"黄牛党").start();


      }

    }

  • 代码案例2:模拟倒计时:


    /**
    * 1,模拟倒计时:
    * 2,打印当前时间:
    *
    *
    */
    public class TestSleep2 {
       public static void main(String[] args) {

           //打印当前系统时间
           Date startTime=new Date(System.currentTimeMillis());

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


      }





       //模拟倒计时
       public static void tenDown() throws InterruptedException{
           int num=10;
           while (true){
               Thread.sleep(1000);
               System.out.println(num--);
               if(num<=0){
                   break;//退出循环
              }
          }
      }

    }

 

 

posted @   gzs1024  阅读(248)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示