public class RaceTest
{
public RaceTest()
{
}
public static void main(String[] args)
{
try
{
Player p1=new Player("乌龟", 1);
Player p2=new Player("兔子", 5);
p1.forReady();
p2.forReady();
Thread.currentThread().sleep(100);
synchronized(start_signal)
{
start=true;
start_signal.notifyAll();
}
p1.join();
p2.join();
}
catch(Throwable e)
{ }
}
private static Object start_signal = new Object();
private static volatile boolean start = false;
private static volatile boolean stop = false;
private static final int total_distance = 100;
private static class Player extends Thread
{
int speed;
int distance = 0;
Player(String name,int _speed)
{
this.setName(name);
speed = _speed;
}
private volatile boolean ready = false;
public void run()
{
long time=0;
try
{
//Ready 信号
synchronized(this)
{
ready=true;
this.notify();
} //比赛开始
synchronized(start_signal)
{
if (!start)
start_signal.wait();
}
long t0 = System.currentTimeMillis();
while(!stop && distance < total_distance)
{
distance += speed;
sleep(100);
}
stop = true;
long t1 = System.currentTimeMillis();
time = t1-t0;
}
catch(InterruptedException e)
{ }
System.out.println(getName() + " 速度:" + speed + " 距离:" + distance + " 时间:" + time + "毫秒");
}
public synchronized void forReady()
{
this.start();
try
{
while(!ready)
{
this.wait();
}
}
catch(Throwable e)
{
e.printStackTrace();
}
}
}
}
{
public RaceTest()
{
}
public static void main(String[] args)
{
try
{
Player p1=new Player("乌龟", 1);
Player p2=new Player("兔子", 5);
p1.forReady();
p2.forReady();
Thread.currentThread().sleep(100);
synchronized(start_signal)
{
start=true;
start_signal.notifyAll();
}
p1.join();
p2.join();
}
catch(Throwable e)
{ }
}
private static Object start_signal = new Object();
private static volatile boolean start = false;
private static volatile boolean stop = false;
private static final int total_distance = 100;
private static class Player extends Thread
{
int speed;
int distance = 0;
Player(String name,int _speed)
{
this.setName(name);
speed = _speed;
}
private volatile boolean ready = false;
public void run()
{
long time=0;
try
{
//Ready 信号
synchronized(this)
{
ready=true;
this.notify();
} //比赛开始
synchronized(start_signal)
{
if (!start)
start_signal.wait();
}
long t0 = System.currentTimeMillis();
while(!stop && distance < total_distance)
{
distance += speed;
sleep(100);
}
stop = true;
long t1 = System.currentTimeMillis();
time = t1-t0;
}
catch(InterruptedException e)
{ }
System.out.println(getName() + " 速度:" + speed + " 距离:" + distance + " 时间:" + time + "毫秒");
}
public synchronized void forReady()
{
this.start();
try
{
while(!ready)
{
this.wait();
}
}
catch(Throwable e)
{
e.printStackTrace();
}
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货