大家好,今天分享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(休眠)就到这里了,谢谢大家
相关文章
暂无评论...