package com.sxt.state;
/**
* sleep模拟网络延时,放大了发生问题的可能性
*
* @author
*
*/
public class BlockedSleep01 {
public static void main(String[] args) {
// 一份资源
Web12306 web = new Web12306();
System.out.println(Thread.currentThread().getName());
// 多个代理
new Thread(web, "码畜").start();
new Thread(web, "码农").start();
new Thread(web, "码蟥").start();
}
}
class Web12306 implements Runnable {
// 票数
private int ticketNums = 99;
@Override
// run()方法不能对外throws异常,只能try..catch..
public void run() {
while (true) {
// 自动退出,正常执行完毕
if (ticketNums < 0) {
break;
}
// 模拟网络延迟
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "-->" + ticketNums--);
}
}
}
package com.sxt.state;
/**
* sleep模拟休息 和时间相关
*
* @author
*
*/
public class BlockedSleep02 {
public static void main(String[] args) {
Racer racer = new Racer();
new Thread(racer, "wugui").start();
new Thread(racer, "tuzi").start();
}
}
class Racer implements Runnable {
private String winner;// 胜利者
@Override
public void run() {
for (int steps = 1; steps <= 100; steps++) {
// 模拟休息
if (Thread.currentThread().getName().equals("tuzi") && steps % 10 == 0) {
try {
// sleep()和对象没有关系,是写在线程体中一个静态方法,谁执行这个线程体,相应的线程对象就进行阻塞
// sleep()方法写到哪个线程里,哪个线程阻塞
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "-->" + steps);
// 比赛是否结束
if (gameOver(steps)) {
break;
}
}
}
public 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;
}
}
package com.sxt.state;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* sleep模拟倒计时 和时间相关
*
* @author
*
*/
public class BlockedSleep03 {
public static void main(String[] args) throws InterruptedException {
// 倒计时 1
Date endTime = new Date(System.currentTimeMillis() + 1000 * 10);
// 11
long end = endTime.getTime();
while (true) {
System.out.println(new SimpleDateFormat("mm:ss").format(endTime));
Thread.sleep(1000);
// 11-1-1...
endTime = new Date(endTime.getTime() - 1000);
if (end - 10000 > endTime.getTime()) {
break;
}
}
}
public static void test() throws InterruptedException {
// 倒数10个数,1秒1个
int num = 10;
while (true) {
Thread.sleep(1000);
System.out.println(num--);
}
}
}
多线程_暂停sleep
最新推荐文章于 2023-06-29 19:23:48 发布