一:引言
练习这个码主要是为了体验在实现 多线程的方式中 实现Runable接口的好处,其中之一 有共享资源 ,一个实现类但可以有多个代理
二:龟兔赛跑
package com.wyj.one;
/**
* 实现Runable接口也就是可以共享资源
* @author 86155
*
*/
public class Demo5_共享资源之龟兔赛跑 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建实现类对象
sace p = new sace();
//启动线程 同一个资源 不同的代理
new Thread(p,"乌龟").start();
new Thread(p,"兔子").start();
}
}
class sace implements Runnable{
private String winner;
@Override
public void run() {
// TODO Auto-generated method stub
for( int steps = 1; steps <= 100;steps++) {
//调节 比赛速度
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//让兔子休息
if(Thread.currentThread().getName().equals("兔子") && steps%10==0){
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
boolean flag = gameover(steps);
if(flag == true)
break;
System.out.println(Thread.currentThread().getName()+"-->"+steps +"米");
}
}
private boolean gameover(int steps) {
if(winner != null)
return true;
if( steps == 100 ) {
winner = Thread.currentThread().getName();
System.out.println("胜利者"+"-->"+Thread.currentThread().getName());
return true;
}
return false;
}
}
三:抢票
package com.wyj.one;
/**
* 共享资源多个代理
*
* @author 86155
*
*/
public class Demo4_共享资源多个代理 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//同一个资源
son3 p = new son3();
System.out.println(Thread.currentThread().getName());//获取当前线程的名字
//多个代理
new Thread(p,"王小杰").start();
new Thread(p,"王中杰").start();
new Thread(p,"王大杰").start();
}
}
class son3 implements Runnable{
private int ticketnums = 99;
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
if(this.ticketnums < 0)
break;
try {
Thread.sleep(200);//模拟网络延迟
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.err.println(Thread.currentThread().getName()+"--->"+ticketnums--);
}
}
}
如有 疑问请留言!