多线程详解之线程休眠
线程休眠:
-
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(); } }
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
unity发布遇到的三个坑