玩转java多线程 之多线程基础 线程休眠 sleep

    科技2022-07-11  103

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

    模拟网络延时,可以放大问题的发生性 比如之前买票的例子:

    package duoxiancheng; //模拟网络延时 public class TestSleep implements Runnable{ //票数 private int ticket = 10; @Override public void run() { while (true) { if(ticket <= 0) { break; } //模拟延时 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "拿到了第" + ticket-- + "票"); } } public static void main(String[] args) { TestThread4 ticket = new TestThread4(); new Thread(ticket, "小明").start(); new Thread(ticket, "老师").start(); new Thread(ticket, "黄牛").start(); } }

    再写一个例子:

    package duoxiancheng; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.SimpleFormatter; //模拟倒计时 public class TestSleep2 { public static void main(String[] args) { try { timeDown(); } catch (InterruptedException e) { e.printStackTrace(); } Date startTime = new Date(System.currentTimeMillis()); //获取系统当前时间 while(true) { try { Thread.sleep(1000); System.out.println(new SimpleDateFormat("HH:mm:ss").format(startTime)); startTime = new Date(System.currentTimeMillis()); //更新当前时间 } catch (InterruptedException e) { e.printStackTrace(); } } } //模拟倒计时 public static void timeDown() throws InterruptedException { int num = 10; while(true) { Thread.sleep(1000); System.out.println(num--); if(num <= 0) { break; } } } }

    好了,今天先到这里了~

    Processed: 0.038, SQL: 8