sleep可以模拟网络延时,可以休眠的代码
/*
* 使用sleep模拟网络延时,这样就会放大问题发生的可能性
*/
public class BlockedSleep {
public static void main(String[] args) {
//一份资源
Web12306 web=new Web12306();
//多个代理
new Thread(web,"laoda").start();
new Thread(web,"laoer").start();
new Thread(web,"laosan").start();
}
}
class Web12306 implements Runnable{
//票数
private int ticketNums=3;
@Override
public void run() {
while(true) {
if(ticketNums<0) {
break;
}
//模拟网络延时
try {
Thread.sleep(200);
//进入了阻塞状态,然后200s以后我就重新等待CPU的调用
//继续执行下面的代码
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"-->"+ticketNums--);
}
}
}
package cn.jd.thread;
/*
* 模拟龟兔赛跑
*/
public class Racer implements Runnable{
//记录下来是谁胜利了
private String winner;
@Override
public void run() {
//乌龟进来乌龟走,兔子进来兔子走
for(int steps=1;steps<=100;steps++) {
//模拟休息
if(Thread.currentThread().getName().equals("rabbit")&& steps%10==0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"-->"+steps);
//比赛是否结束
boolean flag=gameOver(steps);//每走一步判断一次
if(flag) {
break;
}
}
}
private boolean gameOver(int steps) {
if(winner!=null) {//存在胜利者
return true;
}else {
if(steps==100) {
winner=Thread.currentThread().getName();
System.out.println("winner==>"+winner);
return true;
}
}
return false;
}
public static void main(String[] args) {
Racer racer=new Racer();//两人使用的是一条赛道
new Thread(racer,"tortoise").start();
new Thread(racer,"rabbit").start();
}
}

