多线程详解之线程休眠

线程休眠:

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

模拟网络延时,可以放大问题的发声性。

代码实现:

package com.xzit.state;


import com.xzit.Demo01.TestThread4;

//模拟网络延时,放大问题的发生性
public class TestSleep implements Runnable{
          
   
    //票数
    private  int ticketNums = 10;

    @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 ticket = new TestSleep();

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

实验结果:出现资源抢夺问题,小明和黄牛党各自拿到了第一张票。

打印当前系统时间

package com.xzit.state;

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


public class TestSleep2 {
          
   

    

    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());//更新当前时间
        }
      
    }
}

模拟倒计时

package com.xzit.state;

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

//模拟倒计时
public class TestSleep2 {
          
   

    //模拟倒计时
    public static void tenDown() throws InterruptedException {
          
   
        int num=10;

        while(true){
          
   
            Thread.sleep(1000);
            System.out.println(num--);
            if (num<=0){
          
   
                break;
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
          
   
       
        tenDown();
    }
}
经验分享 程序员 微信小程序 职场和发展