package com.wxh.thread;
/**
* 共享资源 (线程并发安全)
* @author Administrator
*
*/
public class Web12306 implements Runnable {
int numberKey = 99;
public void run() {
while(true) {
if(numberKey <0) {
break;
}
try {
Thread.sleep(200); //使用睡眠 模拟网络延迟
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"---->"+numberKey--);
}
}
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();
}
}
开启新线程,开启的3个新线程调用的都是一个run方法,乌龟和兔子都能得到cpu分配资源而得到步数。
package com.wxh.thread;
public class Racer implements Runnable {
public static String winner = null; //胜利者
public void run() {
for(int staps = 1;staps <= 100;staps++) {
//兔子走10步睡100毫秒
if(Thread.currentThread().getName().equals("兔子")&&staps%10==0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"---->"+staps);
boolean flag = gameOver(staps); //比赛是否结束
if(flag) {
break;
}
}
}
private boolean gameOver(int staps) {
if(winner != null) { //存在胜利者
return true;
}else {
if(staps == 100) {
winner = Thread.currentThread().getName();
System.out.println("winner==>"+winner);
return true;
}
}
return false;
}
public static void main(String[] args) {
//同一份资源
Racer r =new Racer();
//多份代理
new Thread(r,"乌龟").start();
new Thread(r,"兔子").start();
}
}