欢迎光临散文网 会员登陆 & 注册

sleep可以模拟网络延时,可以休眠的代码

2020-04-09 20:02 作者:小垃圾kiki  | 我要投稿
package cn.jd.state;



/*
 * 使用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();
    }

}

sleep可以模拟网络延时,可以休眠的代码的评论 (共 条)

分享到微博请遵守国家法律