大家好,今天分享Java多线程的sleep(休眠)
了解这样的几个概念:
1.sleep指向当前线程阻塞的毫秒数(就是可以让线程停一会)
2.sleep 存在异常 InterruptedException
3.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(休眠)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/24267.html