多线程详解之线程休眠
线程休眠:
-
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发布遇到的三个坑
