一:引言
练习这个码主要是为了体验在实现 多线程的方式中 实现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;@Overridepublic void run() {// TODO Auto-generated method stubfor( int steps = 1; steps <= 100;steps++) {//调节 比赛速度try {Thread.sleep(100);} catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}//让兔子休息if(Thread.currentThread().getName().equals("兔子") && steps%10==0){try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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;@Overridepublic void run() {// TODO Auto-generated method stubwhile(true) {if(this.ticketnums < 0)break;try {Thread.sleep(200);//模拟网络延迟 } catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.err.println(Thread.currentThread().getName()+"--->"+ticketnums--);}}}
如有 疑问请留言!