Java多线程的sleep休眠的实现
了解这样的几个概念:
1.sleep指向当前线程阻塞的毫秒数(就是可以让线程停一会)
2.sleep 存在异常 InterruptedException3.sleep 时间达到后线程进入就绪状态4.sleep 可以模拟网络延时,倒计时等5.sleep 每一个对象都有一个锁,sleep 不会释放锁
写源码:
package Demo04; public class TestSleep implements Runnable{ //使用Runnable方法创建程序线程 private int ticketNums =10; //有10张票 @Override public void run() { //重写run方法 while (true){ //写while 循环 if (ticketNums<=0){ //当票数小于等于0 break; //停止循环 } 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(); } }
看结果:
在这个结果当中,有重复,但是不明显
加sleep 休眠
package Demo04; public class TestSleep implements Runnable{ private int ticketNums =10; @Override public void run() { while (true){ if (ticketNums<=0){ break; } try { Thread.sleep(5); //让线程睡了5秒的时间 (模拟网络延迟) }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(); } }
看结果:
这样的重复会很多,所以sleep(休眠),起到模拟网络延迟的作用, 可以放大问题的可见性以及发生性
就是 ,有上面重复的 结果显得明显,即:多线程是不安全的
再写一个实例:
模拟倒计时:
package Demo04; //模拟倒计时 public class TestSleep02 { public static void main(String[] args) { try { tenDown(); } 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; } } } }
看结果
它的显示结果:(注意: 1000ms=1秒)
就是它会从十到一每隔一秒显示一个数字,一直到一
到此这篇关于Java多线程的sleep休眠的实现的文章就介绍到这了,更多相关Java多线程sleep休眠内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论